亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

講的非常不錯(cuò)的PHP編碼規(guī)范第2/3頁

 更新時(shí)間:2008年01月07日 22:36:37   作者:  
講的非常不錯(cuò)的PHP編碼規(guī)范

4.3.4. 函數(shù)定義
l 參數(shù)的名字和變量的命名規(guī)范一致;
l 函數(shù)定義中的左小括號(hào),與函數(shù)名緊挨,中間無需空格;
l 開始的左大括號(hào)另起一行;
l 具有默認(rèn)值的參數(shù)應(yīng)該位于參數(shù)列表的后面;
l 函數(shù)調(diào)用與定義的時(shí)候參數(shù)與參數(shù)之間加入一個(gè)空格;
l 必須仔細(xì)檢查并切實(shí)杜絕函數(shù)起始縮進(jìn)位置與結(jié)束縮進(jìn)位置不同的現(xiàn)象。

例如,符合標(biāo)準(zhǔn)的定義:
function authcode($string, $operation, $key = '')
{
if($flag)
{
//Statement
}
//函數(shù)體


不符合標(biāo)準(zhǔn)的定義:
function authcode($string,$operation,$key = '') {
//函數(shù)體


4.3.5. 引號(hào)
PHP中單引號(hào)和雙引號(hào)具有不同的含義,最大的幾項(xiàng)區(qū)別如下:
單引號(hào)中,任何變量($var)、特殊轉(zhuǎn)義字符(如“\t \r \n”等)不會(huì)被解析,因此PHP的解析速度更快,轉(zhuǎn)義字符僅僅支持“\'”和“\\”這樣對(duì)單引號(hào)和反斜杠本身的轉(zhuǎn)義;
雙引號(hào)中,變量($var)值會(huì)代入字符串中,特殊轉(zhuǎn)義字符也會(huì)被解析成特定的單個(gè)字符,還有一些專門針對(duì)上述兩項(xiàng)特性的特殊功能性轉(zhuǎn)義,例如“\$”和“{$array[‘key']}。這樣雖然程序編寫更加方便,但同時(shí)PHP的解析也很慢;
數(shù)組中,如果下標(biāo)不是整型,而是字符串類型,請(qǐng)務(wù)必用單引號(hào)將下標(biāo)括起,正確的寫法為$array[‘key'],而不是$array[key],因?yàn)椴徽_的寫法會(huì)使PHP解析器認(rèn)為key是一個(gè)常量,進(jìn)而先判斷常量是否存在,不存在時(shí)才以“key”作為下標(biāo)帶入表達(dá)式中,同時(shí)出發(fā)錯(cuò)誤事件,產(chǎn)生一條Notice級(jí)錯(cuò)誤。
因此,在絕大多數(shù)可以使用單引號(hào)的場合,禁止使用雙引號(hào)。依據(jù)上述分析,可以或必須使用單引號(hào)的情況包括但不限于下述:
l 字符串為固定值,不包含“\t”等特殊轉(zhuǎn)義字符;
l 數(shù)組的固定下標(biāo),例如$array[‘key'];
l 表達(dá)式中不需要帶入變量,例如$string = ‘test';,而非$string = “test$var”;
例外的,在正則表達(dá)式(用于preg_系列函數(shù)和ereg系列函數(shù))中,phpcms全部使用雙引號(hào),這是為了人工分析和編寫的方便,并保持正則表達(dá)式的統(tǒng)一,減少不必要的分析混淆。
數(shù)據(jù)庫SQL語句中,所有數(shù)據(jù)都不得加單引號(hào),但是在進(jìn)行sql查詢之前都必須經(jīng)過intval函數(shù)處理;所有字符串都必須加單引號(hào),以避免可能的注入漏洞和SQL錯(cuò)誤。正確的寫法為:
$catid = intval($catid);
SELECT * FROM phpcms_member WHERE username='$_username' AND catid=$catid; 

所有數(shù)據(jù)在插入數(shù)據(jù)庫之前,均需要進(jìn)行addslashes()處理,以免特殊字符未經(jīng)轉(zhuǎn)義在插入數(shù)據(jù)庫的時(shí)候出現(xiàn)錯(cuò)誤。phpcms中如果已經(jīng)引入了文件 common.inc.php,則所有通過 GET, POST, FILE,取得的變量默認(rèn)情況下已經(jīng)使用了addslashes()進(jìn)行了轉(zhuǎn)義,不必重復(fù)進(jìn)行。如果數(shù)據(jù)處理必要(例如用于直接顯示),可以使用 stripslashes() 恢復(fù),但數(shù)據(jù)在插入數(shù)據(jù)庫之前必須再次進(jìn)行轉(zhuǎn)義。
緩存文件中,一般對(duì)緩存數(shù)據(jù)的值采用 addcslashes($string, '\'\\')進(jìn)行轉(zhuǎn)義。

4.3.6. 

4.4.命名原則
命名是程序規(guī)劃的核心。古人相信只要知道一個(gè)人真正的名字就會(huì)獲得凌駕于那個(gè)人之上的不可思議的力量。只要你給事物想到正確的名字,就會(huì)給你以及后來的人帶來比代碼更強(qiáng)的力量。
名字就是事物在它所處的生態(tài)環(huán)境中一個(gè)長久而深遠(yuǎn)的結(jié)果??偟膩碚f,只有了解系統(tǒng)的程序員才能為系統(tǒng)取出最合適的名字。如果所有的命名都與其自然相適合,則關(guān)系清晰,含義可以推導(dǎo)得出,一般人的推想也能在意料之中。
就一般約定而言,類、函數(shù)和變量的名字應(yīng)該總是能夠描述讓代碼閱讀者能夠容易的知道這些代碼的作用。形式越簡單、越有規(guī)則,就越容易讓人感知和理解。應(yīng)該避免使用模棱兩可,晦澀不標(biāo)準(zhǔn)的命名。

4.4.1. 變量、對(duì)象、函數(shù)名
變量、對(duì)象、函數(shù)名一律為小寫格式,除非必要,單詞之間一般不使用下劃線“_”進(jìn)行分割;
以標(biāo)準(zhǔn)計(jì)算機(jī)英文為藍(lán)本,杜絕一切拼音、或拼音英文混雜的命名方式;
變量命名只能使用項(xiàng)目中有據(jù)可查的英文縮寫方式,例如可以使用$data而不可使用$data1、$data2這樣容易產(chǎn)生混淆的形式,應(yīng)當(dāng)使用$articledata、$userdata這樣一目了然容易理解的形式;
可以合理的對(duì)過長的命名進(jìn)行縮寫,例如$bio($biography),$tpp($threadsPerPage),前提是英文中有這樣既有的縮寫形式,或字母符合英文縮寫規(guī)范;
必須清楚所使用英文單詞的詞性,在權(quán)限相關(guān)的范圍內(nèi),大多使用$enable***、$is*** 、的形式,前者后面接動(dòng)詞,后者后面接形容詞。

4.4.2. 常量
常量應(yīng)該總是全部使用大寫字母命名,少數(shù)特別必要的情況下,可使用劃線來分隔單詞;
PHP 的內(nèi)建值 TRUE、FALSE 和NULL必須全部采用大寫字母書寫。

4.5.變量的初始化與邏輯檢查
任何變量在進(jìn)行累加、直接顯示或存儲(chǔ)前必需進(jìn)行初使化,例如:
$number = 0; //數(shù)值型初始化
$string = ‘'; //字符串初始化
$array = array(); //數(shù)組初始化 

判斷一個(gè)無法確定(不知道是否已被賦值)的變量時(shí),可用empty()或isset(),而不要直接使用if($switch)的形式,除非你確切的知道此變量一定已經(jīng)被初始化并賦值。
empty()和isset()的區(qū)別為:
l bool empty(mixed var)
n 如果 var 是非空或非零的值,則 empty() 返回 FALSE。換句話說,""、0、"0"、NULL、FALSE、array()、var $var; 以及沒有任何屬性的對(duì)象都將被認(rèn)為是空的,如果 var 為空,則返回 TRUE。
l bool isset(mixed var[, mixed var[, ...]])
n 如果 var 存在則返回 TRUE,否則返回 FALSE。
n 如果已經(jīng)使用 unset() 釋放了一個(gè)變量之后,它將不再是 isset()。若使用 isset() 測試一個(gè)被設(shè)置成 NULL 的變量,將返回 FALSE。同時(shí)要注意的是一個(gè) NULL 字節(jié)("\0")并不等同于 PHP 的 NULL 常數(shù)。
判斷一個(gè)變量是否為數(shù)組,請(qǐng)使用is_array(),這種判斷尤其適用于對(duì)數(shù)組進(jìn)行遍歷的操作,例如foreach(),因?yàn)槿绻皇孪扰袛?,foreach()會(huì)對(duì)非數(shù)組類型的變量報(bào)錯(cuò);
判斷一個(gè)數(shù)組元素是否存在,可使用isset($array[‘key']),也可使用empty(),兩者異同見上。

4.6.安全性
PHP中的變量不并不像C語言那樣需要事先聲明,解釋器會(huì)在第一次使用時(shí)自動(dòng)創(chuàng)建他們,同樣類型也不需要指定,解釋器會(huì)根據(jù)上下文環(huán)境自動(dòng)確定。從開發(fā)人員的角度來看,這無疑是一種極其方便的處理方法。一個(gè)變量被創(chuàng)建了,就可以在程序中的任何地方使用。這導(dǎo)致的結(jié)果就是開發(fā)人員工經(jīng)常不注意初始化變量。因此,為了提高程序的安全性,我們不能相信任何沒有明確定義的變量。所有的變量在定義使用前要初使化以防止惡意構(gòu)造提交的變量覆蓋程序中使用的變量。
細(xì)節(jié)可以閱讀(http://www.securereality.com.au/studyinscarlet.txt)這篇文檔,該文檔里羅列了PHP常見的安全問題,閱讀該文檔是非常有必要的!

4.7.兼容性
代碼設(shè)計(jì)應(yīng)當(dāng)兼顧PHP 高低版本的特性,當(dāng)前,應(yīng)仍然以PHP 4.3.0作為最低通過平臺(tái),盡量不使用高版本PHP 新增的函數(shù)、常數(shù)或者常量。如果使用只在高版本才具備的函數(shù),必須對(duì)其進(jìn)行二次封裝,自動(dòng)判斷當(dāng)前PHP版本,并自行編寫低版本下的兼容代碼;
對(duì)于個(gè)別函數(shù),參數(shù)要求或者代碼要求應(yīng)當(dāng)以較為嚴(yán)格的PHP版本為準(zhǔn);
除非必要,不要使用PHP擴(kuò)展模塊中的函數(shù)。使用時(shí)應(yīng)當(dāng)加入必要的判斷,當(dāng)服務(wù)器環(huán)境不支持此函數(shù)的時(shí)候,進(jìn)行必要的處理。文檔和程序中的功能說明中,也應(yīng)加上兼容性說明。

4.8.代碼重用
代碼的有效重用可以減少效率的損失與資源的浪費(fèi)。在開發(fā)軟件項(xiàng)目時(shí)為了避免重復(fù)勞動(dòng)和浪費(fèi)時(shí)間。開發(fā)人員應(yīng)盡量提高現(xiàn)有代碼的重用率,同時(shí)將更多的精力用在新技術(shù)的應(yīng)用和新功能的創(chuàng)新開發(fā)上面。
l 在需要多次使用代碼,并且對(duì)于您希望實(shí)現(xiàn)的任務(wù)沒有可用的內(nèi)置 PHP 函數(shù)時(shí),不吝嗇定義函數(shù)或類。開發(fā)者須根據(jù)功能、調(diào)用情況,將函數(shù)放置于include目錄并以.func.php作為函數(shù)文件后綴,將類放置于include/class目錄。超過3行,實(shí)現(xiàn)相同功能的程序切勿在不同程序中多次出現(xiàn),這是無法容忍和回避的問題;
l 在任何時(shí)候都不要出現(xiàn)同一個(gè)程序中出現(xiàn)兩段或更多的相似代碼或相同代碼,即便在不同程序中,也應(yīng)盡力避免。開發(fā)者應(yīng)當(dāng)總是有能力找到避免代碼大段(超過10行)重復(fù)或類似的情況。
需要強(qiáng)調(diào)的是,本部分雖然篇幅較短,但卻是十分需要經(jīng)驗(yàn),并將花費(fèi)開發(fā)者大量時(shí)間和精力去進(jìn)行優(yōu)化的部分,任何產(chǎn)品開發(fā)者必須時(shí)刻清楚和理解代碼重用的重要性和必要性,切實(shí)在增強(qiáng)產(chǎn)品效率、邏輯性和可讀性上下功夫,這是一名優(yōu)秀軟件開發(fā)者所必須具備的基本素質(zhì)。

4.9.其他細(xì)節(jié)問題

4.9.1. 包含調(diào)用
包含調(diào)用程序文件,請(qǐng)全部使用require_once,以避免可能的重復(fù)包含問題;
包含調(diào)用緩存文件,由于緩存文件無法保證100%正確打開,請(qǐng)使用include_once或include。在必要時(shí),可以使用@include_once或@include的方式,以忽略錯(cuò)誤提示;
包含和調(diào)用代碼中,須以PHPCMS_ROOT.'/'開頭,應(yīng)避免直接寫程序文件名(例如:require_once ‘x.php';)的做法;
所有被包含和調(diào)用的程序文件,包括但不限于程序、緩存或模板,通常其不能被直接URL請(qǐng)求。phpcms通過在./include/common.inc.php中定義一個(gè)標(biāo)記性常量IN_PHPCMS,來判斷程序是否被合法調(diào)用。因此,在除了./include/common.inc.php以外的任何一個(gè)被包含和調(diào)用的程序文件中,需要包含以下內(nèi)容,以使得訪問者無法直接通過URL請(qǐng)求該文件:
defined('IN_PHPCMS') or exit('Access Denied'); 

4.9.2. 錯(cuò)誤報(bào)告級(jí)別
在軟件開發(fā)和調(diào)試階段,請(qǐng)使用error_reporting(E_ALL);作為默認(rèn)的錯(cuò)誤報(bào)告級(jí)別,此級(jí)別最為嚴(yán)格,能夠報(bào)告程序中所有的錯(cuò)誤、警告和提示信息,以幫助開發(fā)者檢查和核對(duì)代碼,避免大多數(shù)安全性問題和邏輯錯(cuò)誤、拼寫錯(cuò)誤。error_reporting()可以在./include/common.inc.php的頭幾行進(jìn)行設(shè)置。
在軟件發(fā)布時(shí),請(qǐng)使用error_reporting(E_ERROR | E_WARNING | E_PARSE);作為默認(rèn)的錯(cuò)誤報(bào)告級(jí)別,以利于用戶使用并將無謂錯(cuò)誤提示信息降至最低。
5. 數(shù)據(jù)庫設(shè)計(jì)
5.1.字段
5.1.1. 表和字段命名
表和字段的命名以前面《4.4命名原則》的約定為基本準(zhǔn)則。
所有數(shù)據(jù)表名稱,只要其名稱是可數(shù)名詞,則必須以復(fù)數(shù)方式命名,例如:phpcms_member(用戶表);存儲(chǔ)多項(xiàng)內(nèi)容的字段,或代表數(shù)量的字段,也應(yīng)當(dāng)以復(fù)數(shù)方式命名,例如:hits(查看次數(shù))、items(內(nèi)容數(shù)量)。
當(dāng)幾個(gè)表間的字段有關(guān)連時(shí),要注意表與表之間關(guān)聯(lián)字段命名的統(tǒng)一,如phpcms_article_1表中的articleid與phpcms_article_data_1表中的articleid。
代表id自增量的字段,通常用以下幾種形式:
l 一般情況下,使用全稱的形式,例如userid、articleid;
l 沒有功能性作用,只為管理和維護(hù)方便而設(shè)的id,可以使用全稱的形式,也可只將其命名為id。
篇幅所限,無法一一贅述,但所有與表、字段相關(guān)的命名,請(qǐng)務(wù)必大量參考phpcms現(xiàn)有字段的命名方式,以保證命名的系統(tǒng)性和統(tǒng)一性。
5.1.2. 字段結(jié)構(gòu)
允許NULL值的字段,數(shù)據(jù)庫在進(jìn)行比較操作時(shí),會(huì)先判斷其是否為NULL,非NULL時(shí)才進(jìn)行值的必對(duì)。因此基于效率的考慮,所有字段均不能為空,即全部NOT NULL;
預(yù)計(jì)不會(huì)存儲(chǔ)非負(fù)數(shù)的字段,例如各項(xiàng)id、發(fā)帖數(shù)等,必須設(shè)置為UNSIGNED類型。UNSIGNED類型比非UNSIGNED類型所能存儲(chǔ)的正整數(shù)范圍大一倍,因此能獲得更大的數(shù)值存儲(chǔ)空間;
存儲(chǔ)開關(guān)、選項(xiàng)數(shù)據(jù)的字段,通常使用tinyint(1)非UNSIGNED類型,少數(shù)情況也可能使用enum()結(jié)果集的方式。tinyint作為開關(guān)字段時(shí),通常1為打開;0為關(guān)閉;-1為特殊數(shù)據(jù),例如N/A(不可用);高于1的為特殊結(jié)果或開關(guān)二進(jìn)制數(shù)組合(詳見phpcms中相關(guān)代碼);
MEMORY/HEAP類型的表中,要尤其注意規(guī)劃節(jié)約使用存儲(chǔ)空間,這將節(jié)約更多內(nèi)存。例如cdb_sessions表中,就將IP地址的存儲(chǔ)拆分為4個(gè)tinyint(3) UNSIGNED類型的字段,而沒有采用char(15)的方式;
任何類型的數(shù)據(jù)表,字段空間應(yīng)當(dāng)本著足夠用,不浪費(fèi)的原則,數(shù)值類型的字段取值范圍見下表:
字段類型 存儲(chǔ)空間(b) UNSIGNED 取值范圍
tinyint 1 否 -128~127
是 0~255
smallint 2 否 -32768~32767
是 0~65535
mediumint 3 否 -8388608~8388607
是 0~16777215
int 4 否 -2147483648~2147483647
是 0~4294967295
bigint 8 否 -9223372036854775808
~9223372036854775807
是 0
~18446744073709551615 

5.2.SQL語句
所有SQL語句中,除了表名、字段名稱以外,全部語句和函數(shù)均需大寫,應(yīng)當(dāng)杜絕小寫方式或大小寫混雜的寫法。例如select * from phpcms_member;是不符合規(guī)范的寫法。
很長的SQL語句應(yīng)當(dāng)有適當(dāng)?shù)臄嘈?,依?jù)JOIN、FROM、ORDER BY等關(guān)鍵字進(jìn)行界定。
通常情況下,在對(duì)多表進(jìn)行操作時(shí),要根據(jù)不同表名稱,對(duì)每個(gè)表指定一個(gè)1~2個(gè)字母的縮寫,以利于語句簡潔和可讀性。
如下的語句范例,是符合規(guī)范的:
$result = $db->query(”SELECT m.*, i.*
FROM “.TABLE_MEMBER.” m, “.TABLE_MEMBERINFO.” i
WHERE m.userid=i.userid AND m.userid='$_userid'); 

相關(guān)文章

  • PHP?array_combine()?函數(shù)內(nèi)置函數(shù)

    PHP?array_combine()?函數(shù)內(nèi)置函數(shù)

    這篇文章主要介紹了PHP?array_combine()函數(shù)內(nèi)置函數(shù),array_combine()是PHP中的一個(gè)內(nèi)置函數(shù),用于組合兩個(gè)數(shù)組并通過使用一個(gè)數(shù)組作為鍵和另一個(gè)數(shù)組作為值來創(chuàng)建一個(gè)新數(shù)組
    2022-09-09
  • PHP安全之register_globals的on和off的區(qū)別

    PHP安全之register_globals的on和off的區(qū)別

    這篇文章主要介紹了PHP安全之register_globals的on和off的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 深入php self與$this的詳解

    深入php self與$this的詳解

    本篇文章是對(duì)php中的self與$this進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • php pdo連接數(shù)據(jù)庫操作示例

    php pdo連接數(shù)據(jù)庫操作示例

    這篇文章主要介紹了php pdo連接數(shù)據(jù)庫操作,結(jié)合實(shí)例形式分析了PHP使用pdo連接數(shù)據(jù)庫并執(zhí)行事務(wù)相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • 基于OpenCV的PHP圖像人臉識(shí)別技術(shù)

    基于OpenCV的PHP圖像人臉識(shí)別技術(shù)

    本文所介紹的技術(shù)不是原創(chuàng),而是從一個(gè)叫Robert Eisele的德國人那里學(xué)習(xí)來的。他寫了一個(gè)PHP擴(kuò)展openCV,只封裝了兩個(gè)函數(shù),叫face_detect和face_count。
    2009-10-10
  • 兩個(gè)開源的Php輸出Excel文件類

    兩個(gè)開源的Php輸出Excel文件類

    因?yàn)橛龅搅诉@個(gè)問題,所以到Google搜索了下。
    2010-02-02
  • php部分常見問題總結(jié)

    php部分常見問題總結(jié)

    php常見問題解決集錦,主要包括php的運(yùn)行方法等小技巧
    2008-03-03
  • 9個(gè)比較實(shí)用的php代碼片段

    9個(gè)比較實(shí)用的php代碼片段

    這篇文章主要介紹了9個(gè)非常有用的PHP代碼片段,可以幫助你開發(fā) PHP項(xiàng)目,下面這里收集了9個(gè)PHP代碼片段,感興趣的小伙伴們可以參考一下
    2016-03-03
  • php設(shè)計(jì)模式 Composite (組合模式)

    php設(shè)計(jì)模式 Composite (組合模式)

    將對(duì)象組合成樹形結(jié)構(gòu)以表示"部分-整體"的層次結(jié)構(gòu),使得客戶對(duì)單個(gè)對(duì)象和復(fù)合對(duì)象的使用具有一致性
    2011-06-06
  • PHP串行化與反串行化實(shí)例分析

    PHP串行化與反串行化實(shí)例分析

    這篇文章主要介紹了PHP串行化與反串行化,結(jié)合實(shí)例形式分析了php面向?qū)ο蟪绦蛟O(shè)計(jì)及serialize與unserialize函數(shù)進(jìn)行串行化、反串行化相關(guān)使用技巧,需要的朋友可以參考下
    2016-12-12

最新評(píng)論