欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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


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


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

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

4.3.6. 

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

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

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

4.5.變量的初始化與邏輯檢查
任何變量在進行累加、直接顯示或存儲前必需進行初使化,例如:
$number = 0; //數(shù)值型初始化
$string = ‘'; //字符串初始化
$array = array(); //數(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; 以及沒有任何屬性的對象都將被認為是空的,如果 var 為空,則返回 TRUE。
l bool isset(mixed var[, mixed var[, ...]])
n 如果 var 存在則返回 TRUE,否則返回 FALSE。
n 如果已經(jīng)使用 unset() 釋放了一個變量之后,它將不再是 isset()。若使用 isset() 測試一個被設置成 NULL 的變量,將返回 FALSE。同時要注意的是一個 NULL 字節(jié)("\0")并不等同于 PHP 的 NULL 常數(shù)。
判斷一個變量是否為數(shù)組,請使用is_array(),這種判斷尤其適用于對數(shù)組進行遍歷的操作,例如foreach(),因為如果不事先判斷,foreach()會對非數(shù)組類型的變量報錯;
判斷一個數(shù)組元素是否存在,可使用isset($array[‘key']),也可使用empty(),兩者異同見上。

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

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

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

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

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

4.9.2. 錯誤報告級別
在軟件開發(fā)和調(diào)試階段,請使用error_reporting(E_ALL);作為默認的錯誤報告級別,此級別最為嚴格,能夠報告程序中所有的錯誤、警告和提示信息,以幫助開發(fā)者檢查和核對代碼,避免大多數(shù)安全性問題和邏輯錯誤、拼寫錯誤。error_reporting()可以在./include/common.inc.php的頭幾行進行設置。
在軟件發(fā)布時,請使用error_reporting(E_ERROR | E_WARNING | E_PARSE);作為默認的錯誤報告級別,以利于用戶使用并將無謂錯誤提示信息降至最低。
5. 數(shù)據(jù)庫設計
5.1.字段
5.1.1. 表和字段命名
表和字段的命名以前面《4.4命名原則》的約定為基本準則。
所有數(shù)據(jù)表名稱,只要其名稱是可數(shù)名詞,則必須以復數(shù)方式命名,例如:phpcms_member(用戶表);存儲多項內(nèi)容的字段,或代表數(shù)量的字段,也應當以復數(shù)方式命名,例如:hits(查看次數(shù))、items(內(nèi)容數(shù)量)。
當幾個表間的字段有關連時,要注意表與表之間關聯(lián)字段命名的統(tǒng)一,如phpcms_article_1表中的articleid與phpcms_article_data_1表中的articleid。
代表id自增量的字段,通常用以下幾種形式:
l 一般情況下,使用全稱的形式,例如userid、articleid;
l 沒有功能性作用,只為管理和維護方便而設的id,可以使用全稱的形式,也可只將其命名為id。
篇幅所限,無法一一贅述,但所有與表、字段相關的命名,請務必大量參考phpcms現(xiàn)有字段的命名方式,以保證命名的系統(tǒng)性和統(tǒng)一性。
5.1.2. 字段結構
允許NULL值的字段,數(shù)據(jù)庫在進行比較操作時,會先判斷其是否為NULL,非NULL時才進行值的必對。因此基于效率的考慮,所有字段均不能為空,即全部NOT NULL;
預計不會存儲非負數(shù)的字段,例如各項id、發(fā)帖數(shù)等,必須設置為UNSIGNED類型。UNSIGNED類型比非UNSIGNED類型所能存儲的正整數(shù)范圍大一倍,因此能獲得更大的數(shù)值存儲空間;
存儲開關、選項數(shù)據(jù)的字段,通常使用tinyint(1)非UNSIGNED類型,少數(shù)情況也可能使用enum()結果集的方式。tinyint作為開關字段時,通常1為打開;0為關閉;-1為特殊數(shù)據(jù),例如N/A(不可用);高于1的為特殊結果或開關二進制數(shù)組合(詳見phpcms中相關代碼);
MEMORY/HEAP類型的表中,要尤其注意規(guī)劃節(jié)約使用存儲空間,這將節(jié)約更多內(nèi)存。例如cdb_sessions表中,就將IP地址的存儲拆分為4個tinyint(3) UNSIGNED類型的字段,而沒有采用char(15)的方式;
任何類型的數(shù)據(jù)表,字段空間應當本著足夠用,不浪費的原則,數(shù)值類型的字段取值范圍見下表:
字段類型 存儲空間(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ù)均需大寫,應當杜絕小寫方式或大小寫混雜的寫法。例如select * from phpcms_member;是不符合規(guī)范的寫法。
很長的SQL語句應當有適當?shù)臄嘈?,依?jù)JOIN、FROM、ORDER BY等關鍵字進行界定。
通常情況下,在對多表進行操作時,要根據(jù)不同表名稱,對每個表指定一個1~2個字母的縮寫,以利于語句簡潔和可讀性。
如下的語句范例,是符合規(guī)范的:
$result = $db->query(”SELECT m.*, i.*
FROM “.TABLE_MEMBER.” m, “.TABLE_MEMBERINFO.” i
WHERE m.userid=i.userid AND m.userid='$_userid'); 

相關文章

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

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

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

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

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

    深入php self與$this的詳解

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

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

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

    基于OpenCV的PHP圖像人臉識別技術

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

    兩個開源的Php輸出Excel文件類

    因為遇到了這個問題,所以到Google搜索了下。
    2010-02-02
  • php部分常見問題總結

    php部分常見問題總結

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

    9個比較實用的php代碼片段

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

    php設計模式 Composite (組合模式)

    將對象組合成樹形結構以表示"部分-整體"的層次結構,使得客戶對單個對象和復合對象的使用具有一致性
    2011-06-06
  • PHP串行化與反串行化實例分析

    PHP串行化與反串行化實例分析

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

最新評論