摘要:所以在末尾不加可以預(yù)防文件被惡意加入字符輸出到網(wǎng)頁。它是一種注釋代碼的正式標(biāo)準(zhǔn)。
一、 命名規(guī)則 1. 命名規(guī)則概要
1) 使用含義豐富的名字
# good if ($currentYear > 2009) ... # bad if($t > 2009) ...
2) 在縮寫中,只將首字母大寫
# good function getHttpHost() #bad function getHTTPHost()2. 類命名
1) 類應(yīng)該以名詞單數(shù)形式, 首字母大寫, 大小寫混排,方式命名
class SqlStatement { ... }
2) 表示一組事物的類應(yīng)使用復(fù)數(shù)形式
class SqlStatements { ... }
3) 類型開頭要比以類型結(jié)尾更容易識(shí)別
對一個(gè)已知類型的變量來說, 其名稱以類型開頭要比以類型結(jié)尾更容易識(shí)別
class ErrorConnection extends Error { // ... } $arrCatids = array(1,2,3,4,5,6); $strCatids = ‘1,2,3,4,5,6’;
4) 接口的默認(rèn)實(shí)現(xiàn)類可以以Default開頭
class DefaultSqlBuilder extends ISqlBuilder { //... }3. 接口命名
接口的名字應(yīng)為以字母”I”開頭的名詞或形容詞
interface ISqlEngine{} interface ISortable{}4. 變量/屬性命名
1) 屬性名應(yīng)以小寫字母開頭, 采用駝峰法則.
public $userAuth;
3) 常量的名字必須全部為大寫字母
所有字母大寫,單詞之間用下劃線分割
const SEARCH_GOOGLE = 1; const SEARCH_YAHOO = 2;
4) 命名一組對象時(shí),應(yīng)使用復(fù)數(shù)形式
public $books;
5) 布爾型變量不應(yīng)使用否定性名字
# good public $isFound; public $isEnough; # bad public $isNotFound; public $isNotEnough;
6) 在嵌套循環(huán)中,使用有意義豐富的名字來命名循環(huán)控制變量
# good for($row = 0; $i < getRows();$row++) { for($col= 0;$j < getCols(); $col++) { // ... } } # bad for($i = 0; $i < getRows();$i++) { for($j= 0;$j < getCols(); $j++){ // ... } }
7) 傳入的變量采用蛇形寫法, 自定義函數(shù)變量采用蛇形寫法
# 控制器變量 class UserController extends Controller{ function postLogin(Request $request) { // 這里是蛇形寫法 $order_status = $request->input("order_status"); } } # 自定義函數(shù)變量 # 這里傳入的變量采用蛇形寫法 function route_url($route, $params, $option_params){ // ... }5. 函數(shù)命名
禁止拼音命名法
1) 類函數(shù)名稱以小寫字母開頭, 采用駝峰法則
function getCurrentYear()
2) 用動(dòng)詞命名函數(shù)
# 動(dòng)詞表: add / edit / remove begin / end create / destroy first / last get / release get / set increment / decrement put / get lock / unlock open / close min / max old / new start / stop next / previous source / target show / hide send / receive cut / paste up / down # 系詞表: is / has
function startDatabase() function getDatabaseStatus()
3) 函數(shù)名字可以忽略類或?qū)ο竺Q,以避免重復(fù)
# good class Font { function getFamily(); } # bad class Font { function getFontFamily(); }
4) 單例類應(yīng)該通過一個(gè)名為getInstance()的靜態(tài)函數(shù)返回他們唯一的值
class Toolkit { private static const toolkit = new Toolkit(); public static function getInstance(){ return toolkit; } }二、 文件格式/ 技巧 1. 留白
恰當(dāng)?shù)氖褂每崭窨梢杂行岣叽a的可讀性
1) 使用空格的通用規(guī)則
操作符,冒號(hào)的前后都應(yīng)有一個(gè)空格.
逗號(hào),分號(hào)之后須有一個(gè)空格
# good $bit = $bitStart + $bitEnd; case "someStr" : mysqlConnection($config, $dbname); if($count > 9) #bad $bit=$bitStart+$bitEnd; case "someStr": mysqlConnection($config,$dbname); if($count>9)
2) 邏輯單元應(yīng)該以空行分割
function drawCapture() { $chars = getChars(5); // imageCreate $img = imageCreate(); // output image outputImage(); }2. 控制流程
1) for,while,if語句格式如下
# for for (init; condition; update) { // ... } # while while (condition) { // ... } # if if (condition) { // ... } else if (condition) { // ... } else { // ... }
2) 循環(huán)/條件語句必須以 ‘{‘ , ’}’嵌套
# good if ($i > 0) { $val ++; } for ($i = 0; $i < $size; $i++) { $val ++; } # bad for($i=0; $i<$size; $i++) $val ++; if($i > 0) $val ++;
3) 使用臨時(shí)變量以避免復(fù)合條件語句
# good $itemValid = $itemMoney > 800 && $level > 3 && $valid > 0; if($itemValid && isReady()) { display(); } # bad if($itemMoney > 800 && $level > 3 && $valid > 0 && isReady()) { display(); }
4) Switches 語句應(yīng)該套用以下格式,并且每個(gè)分支必須注釋清楚
switch (condition) { case 0: // show something break; default: // this is some code }3. 聲明
1) 類/接口聲明順序
類文檔中的語句的順序.
1. 文檔/注釋 2. 類/接口語句 3. 常量 4. 靜態(tài)變量順序:[public, protected, (default), private] 5. 實(shí)例變量順序:[public, protected, (default), private] 6. 構(gòu)造函數(shù) __construct(); 7. 函數(shù) function;
2) 變量的聲明要在代碼塊的開頭,而不是在用到它們的地方
public function method() { $value = 0; ... for (...) { $value += $num; } }4. 技巧
刪除文件尾部的 ?>
php文件的典型標(biāo)記是以 結(jié)尾。但是在Zend Framework中卻不推薦在php文件末尾加 ?>
因?yàn)樵??php ?>之外的任何字符都會(huì)被輸出到網(wǎng)頁上,而之中的卻不會(huì)。所以在末尾不加?>可以預(yù)防php文件被惡意加入字符輸出到網(wǎng)頁。
數(shù)組的鍵名
在PHP中, 使用不經(jīng)單引號(hào)包含的字符串作為數(shù)組鍵名是合法的, 但是我們不希望如此 -- 鍵名應(yīng)該總是由單引號(hào)包含而避免引起混淆. 注意這是使用一個(gè)字符串, 而不是使用變量做鍵名的情況
// 錯(cuò)誤 $foo = $assoc_array[blah]; // 正確 $foo = $assoc_array["blah"]; // 錯(cuò)誤 $foo = $assoc_array["$var"]; // 正確 $foo = $assoc_array[$var];
不要使用未初始化的變量
// 錯(cuò)誤 if ($forum) ... // 正確 if (isset($forum)) ... // 正確 if (isset($forum) && $forum == 5)
避免在大數(shù)組上使用 in_array()
避免在大的數(shù)組上使用 in_array(), 同時(shí)避免在循環(huán)中對包含200個(gè)以上元素的數(shù)組使用這個(gè)函數(shù). in_array()會(huì)非常消耗資源. 對于小的數(shù)組這種影響可能很小, 但是在一個(gè)循環(huán)中檢查大數(shù)組可能會(huì)需要好幾秒鐘的時(shí)間. 如果您確實(shí)需要這個(gè)功能, 請使用isset()來查找數(shù)組元素. 實(shí)際上是使用鍵名來查詢鍵值. 調(diào)用 isset($array[$var]) 會(huì)比 in_array($var, array_keys($array)) 要快得多.
SQL 腳本格式
SQL 代碼常常會(huì)變得很長, 如果不作一定的格式規(guī)范, 將很難讀懂. SQL代碼一般按照以下的格式書寫, 以關(guān)鍵字換行:
$sql = "SELECT * <-one tab->FROM " . SOME_TABLE . " <-one tab->WHERE a = 1 <-two tabs->AND (b = 2 <-three tabs->OR b = 3) <-one tab->ORDER BY b";
這里是應(yīng)用了制表符後的例子:
$sql = "SELECT * FROM " . SOME_TABLE . " WHERE a = 1 AND (b = 2 OR b = 3) ORDER BY b";
禁止使用單字母開頭的變量
$tKey, $tVal5. 空行的使用
兩個(gè)函數(shù)之間必須有1個(gè)空行。
return、die、exit之前如果有其他語句的情況下應(yīng)加上一個(gè)空行
三、 文檔與注釋 1. PHPDocPHPDoc 是一個(gè) PHP 版的 Javadoc。它是一種注釋 PHP 代碼的正式標(biāo)準(zhǔn)。它支持通過類似 phpDocumentor 這樣的外部文檔生成器生成 API 文檔,也可以幫助一些例如 Zend Studio, NetBeans, ActiveState Komodo Edit and IDE 和 Aptana Studio 之類的 集成開發(fā)環(huán)境 理解變量類型和弱類型語言中的其他歧義并提供改進(jìn)的代碼完成,類型提示和除錯(cuò)功能。
參考地址: http://zh.wikipedia.org/zh/PH...
注釋類
/** * 這是某個(gè)類的介紹 */ class SomeClass{}
注釋局部變量
function someFunction(){ var $result; //獲取到的結(jié)果集 var $searchResult; //獲取到的搜索結(jié)果集 // ... }
注釋變量
/** @var name string */ public $name
注釋函數(shù)
注釋的標(biāo)記應(yīng)按照以下順序
* @param * @return * @see3. PHP文檔頭部注釋
/** ?* 文件頭部說明 ?* ?* @author ? ? Mark ([email protected]) ?* @copyright ?Copyright (c) 2014-2016 sour-lemon team ?*/框架常用命名 控制器方法
getIndex() # 列表 getCreate() # 創(chuàng)建 postCreate() # 保存創(chuàng)建 getEdit() # 編輯 postEdit() # 保存編輯 postUpdate() # 批量更新 postDelete() # 刪除到回收站 postDestroy() # 徹底刪除附錄Appendices 附錄A:參考文檔
PHPBB 編碼規(guī)范
http://www.phpbbchina.com/wik...編碼規(guī)范
Typecho PHP 編碼規(guī)范
https://code.google.com/p/typ...
優(yōu)化編寫代碼過程中的PHP
http://www.yeeyan.org/article...
在線版地址 : http://manual.phpdoc.org/HTML...
@abstract Documents an abstract class, class variable or method. @access public, private or protected Documents access control for an element. @access private indicates that documentation of element be prevented. @author author name附錄C: 版本變化 v1.4(2016年10月07日)Documents the author of the current element. @category Specify a category to organize the documented element’s package into @copyright name date Documents copyright information. @deprecated version Documents a method as deprecated. @example /path/to/example Documents the location of an external saved example file. @exception documents an exception thrown by a method — also see @throws. @global type $globalvarname Documents a global variable or its use in a function or method. @ignore Prevents the documentation of an element @internal private information for advanced developers @link URL @name global variable name Specifies an alias for a variable. For example, $GLOBALS[‘myvariable’] becomes $myvariable @magic phpDocumentor tags}-. @package name of a package Documents a group of related classes and functions. @param type [$varname] description @return type description This tag should not be used for constructors or methods defined with a?void?return type. @see Documents an association to another method or class. @since version Documents when a method was added to a class. @static Documents a static class or method @staticvar Documents a static variable’s use in a function or class @subpackage @throws Documents an exception thrown by a method. @todo Documents things that need to be done to the code at a later date. @var type a data type for a class variable @version Provides the version number of a class or method.
更改為markdown格式, 并且將其替換為Laravel 編碼格式
V1.3(2015年4月19日)項(xiàng)目文件結(jié)構(gòu)說明
V1.2(2013年4月27日)分離項(xiàng)目公共部分
V1.1(2013年4月2日)增加左格式化內(nèi)容
增加刪除 ?> 標(biāo)記
初始化規(guī)范
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/25723.html
摘要:框架采用編碼規(guī)范開發(fā)的一套框架,純面向?qū)ο箝_發(fā),依賴包管理模版引擎數(shù)據(jù)庫類錯(cuò)誤輸出等在項(xiàng)目根目錄下使用命令執(zhí)行安裝插件二入口文件。引入文件,開啟錯(cuò)誤提示插件三數(shù)據(jù)庫配置文件。視圖模版不存在七控制器操作數(shù)據(jù)并顯示到頁面。 一、composer依賴包管理工具。composer.json { name:PHP-FRAME, author:Guoming.Zhang, ...
摘要:一背景團(tuán)隊(duì)最近頻繁遭受網(wǎng)絡(luò)攻擊,引起了技術(shù)負(fù)責(zé)人的重視,筆者在團(tuán)隊(duì)中相對來說更懂安全,因此花了點(diǎn)時(shí)間編輯了一份安全開發(fā)自檢清單,覺得應(yīng)該也有不少讀者有需要,所以將其分享出來。 一、背景 團(tuán)隊(duì)最近頻繁遭受網(wǎng)絡(luò)攻擊,引起了技術(shù)負(fù)責(zé)人的重視,筆者在團(tuán)隊(duì)中相對來說更懂安全,因此花了點(diǎn)時(shí)間編輯了一份安全開發(fā)自檢清單,覺得應(yīng)該也有不少讀者有需要,所以將其分享出來。 二、編碼安全 2.1 輸入驗(yàn)證 ...
摘要:一背景團(tuán)隊(duì)最近頻繁遭受網(wǎng)絡(luò)攻擊,引起了技術(shù)負(fù)責(zé)人的重視,筆者在團(tuán)隊(duì)中相對來說更懂安全,因此花了點(diǎn)時(shí)間編輯了一份安全開發(fā)自檢清單,覺得應(yīng)該也有不少讀者有需要,所以將其分享出來。 一、背景 團(tuán)隊(duì)最近頻繁遭受網(wǎng)絡(luò)攻擊,引起了技術(shù)負(fù)責(zé)人的重視,筆者在團(tuán)隊(duì)中相對來說更懂安全,因此花了點(diǎn)時(shí)間編輯了一份安全開發(fā)自檢清單,覺得應(yīng)該也有不少讀者有需要,所以將其分享出來。 二、編碼安全 2.1 輸入驗(yàn)證 ...
摘要:年開發(fā)并發(fā)布框架現(xiàn)已停止維護(hù)。經(jīng)過一年實(shí)戰(zhàn),年月日,一周年之際正式發(fā)布版本。宇潤部分開源項(xiàng)目我已通過碼云平臺(tái),向項(xiàng)目力所能及地捐款,聊表心意。所以,目前主打的還是單體應(yīng)用開發(fā)。協(xié)議的開發(fā),也是帶來的一大優(yōu)勢。 imi 介紹 showImg(https://segmentfault.com/img/bVbuab9?w=291&h=187); imi 是基于 PHP 協(xié)程應(yīng)用開發(fā)框架,它支...
摘要:標(biāo)準(zhǔn)規(guī)范簡介是的簡寫,由組織制定的規(guī)范,是開發(fā)的實(shí)踐標(biāo)準(zhǔn)。具體標(biāo)準(zhǔn)有有了統(tǒng)一編碼風(fēng)格規(guī)范,更有利于查看和學(xué)習(xí)各個(gè)框架或類庫,不不需要每次都適應(yīng)新的編碼風(fēng)格。同時(shí)在開發(fā)團(tuán)隊(duì)內(nèi)部使用統(tǒng)一的編碼規(guī)范更有利于代碼審查版本控制團(tuán)隊(duì)內(nèi)部交流。 PHP 標(biāo)準(zhǔn)規(guī)范 PSR PSR 簡介 PSR 是 PHP Standard Recommendations 的簡寫,由 PHP FIG 組織制定的 PHP...
閱讀 1242·2021-11-11 16:54
閱讀 889·2021-10-19 11:44
閱讀 1356·2021-09-22 15:18
閱讀 2460·2019-08-29 16:26
閱讀 2964·2019-08-29 13:57
閱讀 3109·2019-08-26 13:32
閱讀 1093·2019-08-26 11:58
閱讀 2345·2019-08-26 10:37