摘要:所以在末尾不加可以預防文件被惡意加入字符輸出到網頁。它是一種注釋代碼的正式標準。
一、 命名規則 1. 命名規則概要
1) 使用含義豐富的名字
# good if ($currentYear > 2009) ... # bad if($t > 2009) ...
2) 在縮寫中,只將首字母大寫
# good function getHttpHost() #bad function getHTTPHost()2. 類命名
1) 類應該以名詞單數形式, 首字母大寫, 大小寫混排,方式命名
class SqlStatement { ... }
2) 表示一組事物的類應使用復數形式
class SqlStatements { ... }
3) 類型開頭要比以類型結尾更容易識別
對一個已知類型的變量來說, 其名稱以類型開頭要比以類型結尾更容易識別
class ErrorConnection extends Error { // ... } $arrCatids = array(1,2,3,4,5,6); $strCatids = ‘1,2,3,4,5,6’;
4) 接口的默認實現類可以以Default開頭
class DefaultSqlBuilder extends ISqlBuilder { //... }3. 接口命名
接口的名字應為以字母”I”開頭的名詞或形容詞
interface ISqlEngine{} interface ISortable{}4. 變量/屬性命名
1) 屬性名應以小寫字母開頭, 采用駝峰法則.
public $userAuth;
3) 常量的名字必須全部為大寫字母
所有字母大寫,單詞之間用下劃線分割
const SEARCH_GOOGLE = 1; const SEARCH_YAHOO = 2;
4) 命名一組對象時,應使用復數形式
public $books;
5) 布爾型變量不應使用否定性名字
# good public $isFound; public $isEnough; # bad public $isNotFound; public $isNotEnough;
6) 在嵌套循環中,使用有意義豐富的名字來命名循環控制變量
# 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) 傳入的變量采用蛇形寫法, 自定義函數變量采用蛇形寫法
# 控制器變量 class UserController extends Controller{ function postLogin(Request $request) { // 這里是蛇形寫法 $order_status = $request->input("order_status"); } } # 自定義函數變量 # 這里傳入的變量采用蛇形寫法 function route_url($route, $params, $option_params){ // ... }5. 函數命名
禁止拼音命名法
1) 類函數名稱以小寫字母開頭, 采用駝峰法則
function getCurrentYear()
2) 用動詞命名函數
# 動詞表: 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) 函數名字可以忽略類或對象名稱,以避免重復
# good class Font { function getFamily(); } # bad class Font { function getFontFamily(); }
4) 單例類應該通過一個名為getInstance()的靜態函數返回他們唯一的值
class Toolkit { private static const toolkit = new Toolkit(); public static function getInstance(){ return toolkit; } }二、 文件格式/ 技巧 1. 留白
恰當的使用空格可以有效提高代碼的可讀性
1) 使用空格的通用規則
操作符,冒號的前后都應有一個空格.
逗號,分號之后須有一個空格
# 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) 邏輯單元應該以空行分割
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) 循環/條件語句必須以 ‘{‘ , ’}’嵌套
# 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) 使用臨時變量以避免復合條件語句
# good $itemValid = $itemMoney > 800 && $level > 3 && $valid > 0; if($itemValid && isReady()) { display(); } # bad if($itemMoney > 800 && $level > 3 && $valid > 0 && isReady()) { display(); }
4) Switches 語句應該套用以下格式,并且每個分支必須注釋清楚
switch (condition) { case 0: // show something break; default: // this is some code }3. 聲明
1) 類/接口聲明順序
類文檔中的語句的順序.
1. 文檔/注釋 2. 類/接口語句 3. 常量 4. 靜態變量順序:[public, protected, (default), private] 5. 實例變量順序:[public, protected, (default), private] 6. 構造函數 __construct(); 7. 函數 function;
2) 變量的聲明要在代碼塊的開頭,而不是在用到它們的地方
public function method() { $value = 0; ... for (...) { $value += $num; } }4. 技巧
刪除文件尾部的 ?>
php文件的典型標記是以 結尾。但是在Zend Framework中卻不推薦在php文件末尾加 ?>
因為在之外的任何字符都會被輸出到網頁上,而之中的卻不會。所以在末尾不加?>可以預防php文件被惡意加入字符輸出到網頁。
數組的鍵名
在PHP中, 使用不經單引號包含的字符串作為數組鍵名是合法的, 但是我們不希望如此 -- 鍵名應該總是由單引號包含而避免引起混淆. 注意這是使用一個字符串, 而不是使用變量做鍵名的情況
// 錯誤 $foo = $assoc_array[blah]; // 正確 $foo = $assoc_array["blah"]; // 錯誤 $foo = $assoc_array["$var"]; // 正確 $foo = $assoc_array[$var];
不要使用未初始化的變量
// 錯誤 if ($forum) ... // 正確 if (isset($forum)) ... // 正確 if (isset($forum) && $forum == 5)
避免在大數組上使用 in_array()
避免在大的數組上使用 in_array(), 同時避免在循環中對包含200個以上元素的數組使用這個函數. in_array()會非常消耗資源. 對于小的數組這種影響可能很小, 但是在一個循環中檢查大數組可能會需要好幾秒鐘的時間. 如果您確實需要這個功能, 請使用isset()來查找數組元素. 實際上是使用鍵名來查詢鍵值. 調用 isset($array[$var]) 會比 in_array($var, array_keys($array)) 要快得多.
SQL 腳本格式
SQL 代碼常常會變得很長, 如果不作一定的格式規范, 將很難讀懂. SQL代碼一般按照以下的格式書寫, 以關鍵字換行:
$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";
這里是應用了制表符後的例子:
$sql = "SELECT * FROM " . SOME_TABLE . " WHERE a = 1 AND (b = 2 OR b = 3) ORDER BY b";
禁止使用單字母開頭的變量
$tKey, $tVal5. 空行的使用
兩個函數之間必須有1個空行。
return、die、exit之前如果有其他語句的情況下應加上一個空行
三、 文檔與注釋 1. PHPDocPHPDoc 是一個 PHP 版的 Javadoc。它是一種注釋 PHP 代碼的正式標準。它支持通過類似 phpDocumentor 這樣的外部文檔生成器生成 API 文檔,也可以幫助一些例如 Zend Studio, NetBeans, ActiveState Komodo Edit and IDE 和 Aptana Studio 之類的 集成開發環境 理解變量類型和弱類型語言中的其他歧義并提供改進的代碼完成,類型提示和除錯功能。
參考地址: http://zh.wikipedia.org/zh/PH...
注釋類
/** * 這是某個類的介紹 */ class SomeClass{}
注釋局部變量
function someFunction(){ var $result; //獲取到的結果集 var $searchResult; //獲取到的搜索結果集 // ... }
注釋變量
/** @var name string */ public $name
注釋函數
注釋的標記應按照以下順序
* @param * @return * @see3. PHP文檔頭部注釋
/** ?* 文件頭部說明 ?* ?* @author ? ? Mark (zhaody901@126.com) ?* @copyright ?Copyright (c) 2014-2016 sour-lemon team ?*/框架常用命名 控制器方法
getIndex() # 列表 getCreate() # 創建 postCreate() # 保存創建 getEdit() # 編輯 postEdit() # 保存編輯 postUpdate() # 批量更新 postDelete() # 刪除到回收站 postDestroy() # 徹底刪除附錄Appendices 附錄A:參考文檔
PHPBB 編碼規范
http://www.phpbbchina.com/wik...編碼規范
Typecho PHP 編碼規范
https://code.google.com/p/typ...
優化編寫代碼過程中的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日)項目文件結構說明
V1.2(2013年4月27日)分離項目公共部分
V1.1(2013年4月2日)增加左格式化內容
增加刪除 ?> 標記
初始化規范
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25723.html
摘要:框架采用編碼規范開發的一套框架,純面向對象開發,依賴包管理模版引擎數據庫類錯誤輸出等在項目根目錄下使用命令執行安裝插件二入口文件。引入文件,開啟錯誤提示插件三數據庫配置文件。視圖模版不存在七控制器操作數據并顯示到頁面。 一、composer依賴包管理工具。composer.json { name:PHP-FRAME, author:Guoming.Zhang, ...
摘要:一背景團隊最近頻繁遭受網絡攻擊,引起了技術負責人的重視,筆者在團隊中相對來說更懂安全,因此花了點時間編輯了一份安全開發自檢清單,覺得應該也有不少讀者有需要,所以將其分享出來。 一、背景 團隊最近頻繁遭受網絡攻擊,引起了技術負責人的重視,筆者在團隊中相對來說更懂安全,因此花了點時間編輯了一份安全開發自檢清單,覺得應該也有不少讀者有需要,所以將其分享出來。 二、編碼安全 2.1 輸入驗證 ...
摘要:一背景團隊最近頻繁遭受網絡攻擊,引起了技術負責人的重視,筆者在團隊中相對來說更懂安全,因此花了點時間編輯了一份安全開發自檢清單,覺得應該也有不少讀者有需要,所以將其分享出來。 一、背景 團隊最近頻繁遭受網絡攻擊,引起了技術負責人的重視,筆者在團隊中相對來說更懂安全,因此花了點時間編輯了一份安全開發自檢清單,覺得應該也有不少讀者有需要,所以將其分享出來。 二、編碼安全 2.1 輸入驗證 ...
摘要:年開發并發布框架現已停止維護。經過一年實戰,年月日,一周年之際正式發布版本。宇潤部分開源項目我已通過碼云平臺,向項目力所能及地捐款,聊表心意。所以,目前主打的還是單體應用開發。協議的開發,也是帶來的一大優勢。 imi 介紹 showImg(https://segmentfault.com/img/bVbuab9?w=291&h=187); imi 是基于 PHP 協程應用開發框架,它支...
摘要:標準規范簡介是的簡寫,由組織制定的規范,是開發的實踐標準。具體標準有有了統一編碼風格規范,更有利于查看和學習各個框架或類庫,不不需要每次都適應新的編碼風格。同時在開發團隊內部使用統一的編碼規范更有利于代碼審查版本控制團隊內部交流。 PHP 標準規范 PSR PSR 簡介 PSR 是 PHP Standard Recommendations 的簡寫,由 PHP FIG 組織制定的 PHP...
閱讀 1225·2021-11-11 16:54
閱讀 876·2021-10-19 11:44
閱讀 1337·2021-09-22 15:18
閱讀 2444·2019-08-29 16:26
閱讀 2946·2019-08-29 13:57
閱讀 3094·2019-08-26 13:32
閱讀 1080·2019-08-26 11:58
閱讀 2328·2019-08-26 10:37