想寫好php程式,那麼大家一定要知道php有哪些規範,本文主要和大家分享php規範解析,希望能協助到大家。
<?php/** * 符合psr-1,2的編程執行個體 * * @author GreenForestQuan */namespace Standard; // 頂部命名空間// 空一行use Test\TestClass;//use引入類/** * 類描述 * * 類名必須大寫開頭駝峰. */abstract class StandardExample // {}必須換行{ /** * 常量描述. * * @var string */ const THIS_IS_A_CONST = ''; // 常量全部大寫底線分割 /** * 屬性描述. * * @var string */ public $nameTest = ''; // 屬性名稱建議開頭小寫駝峰 // 成員屬性必須添加public(不能省略), private, protected修飾符 /** * 屬性描述. * * @var string */ private $_privateNameTest = ''; // 類私人成員屬性,【個人建議】底線小寫開頭駝峰 /** * 建構函式. * * 建構函式描述 * * @param string $value 形參名稱/描述 */ public function __construct($value = '')// 成員方法必須添加public(不能省略), private, protected修飾符 {// {}必須換行 $this->nameTest = new TestClass(); // 鏈式操作 $this->nameTest->functionOne() ->functionTwo() ->functionThree(); // 一段代碼邏輯執行完畢 換行 // code... } /** * 成員方法名稱. * * 成員方法描述 * * @param string $value 形參名稱/描述 * * @return 傳回值類型 傳回值描述 * 傳回值類型:string,array,object,mixed(多種,不確定的),void(無傳回值) */ public function testFunction($value = '')// 成員方法必須小寫開頭駝峰 { // code... } /** * 成員方法名稱. * * 成員方法描述 * * @param string $value 形參名稱/描述 * * @return 傳回值類型 傳回值描述 */ private function _privateTestFunction($value = '')// 私人成員方法【個人建議】底線小寫開頭駝峰 { // code... } /** * 成員方法名稱. * * 成員方法描述 * * @param string $value 形參名稱/描述 * * @return 傳回值類型 傳回值描述 */ public static function staticFunction($value = '')// static位於修飾符之後 { // code... } /** * 成員方法名稱. * * 成員方法描述 * * @param string $value 形參名稱/描述 * * @return 傳回值類型 傳回值描述 */ abstract public function abstractFunction($value = ''); // abstract位於修飾符之前 /** * 成員方法名稱. * * 成員方法描述 * * @param string $value 形參名稱/描述 * * @return 傳回值類型 傳回值描述 */ final public function finalFunction($value = '')// final位於修飾符之前 { // code... } /** * 成員方法名稱. * * 成員方法描述 * * @param string $valueOne 形參名稱/描述 * @param string $valueTwo 形參名稱/描述 * @param string $valueThree 形參名稱/描述 * @param string $valueFour 形參名稱/描述 * @param string $valueFive 形參名稱/描述 * @param string $valueSix 形參名稱/描述 * * @return 傳回值類型 傳回值描述 */ public function tooLangFunction( $valueOne = '', // 變數命名可小寫開頭駝峰或者底線命名,個人那習慣,據說底線可讀性好 $valueTwo = '', $valueThree = '', $valueFour = '', $valueFive = '', $valueSix = '')// 參數過多換行 { if ($valueOne === $valueTwo) {// 控制結構=>後加空格,同{一行,(右邊和)左邊不加空格 // code... } switch ($valueThree) { case 'value': // code... break; default: // code... break; } do { // code... } while ($valueFour <= 10); while ($valueFive <= 10) { // code... } for ($i=0; $i < $valueSix; $i++) { // code... } }}
編碼規範PHP代碼檔案必須以 <?php 標籤開始。<?php //開頭// 不結尾PHP代碼檔案必須以不帶BOM的UTF-8編碼。例sublime, setting增加,"show_encoding" : true每行的字元數不超過 80 個字元例,sublime"word_wrap": "true","wrap_width": 80,tap鍵4個空格例,sublime"tab_size": 4,PHP代碼中應該只定義類(trait)/函數/常量/其他會產生副作用的操作(如:組建檔案輸出以及修改 .ini 設定檔等),只能選其一。例,a.phpclass A{}b.phpfunction demo(){}c.phpdefine('A', value);d.phpini_set('some_vars', value);類/trait/Interface的命名必須遵循 StudlyCaps 大寫開頭的駝峰命名規範。class StudlyCaps{}trait StudlyCaps{}Interface StudlyCaps{}類中的常量所有字母都必須大寫,單詞間用底線分隔。define('FOO_BAR', 'something more');const FOO_BAR = value;方法(類/trait中)名稱必須符合 camelCase 式的小寫開頭駝峰命名規範。class StudlyCaps{ public function studlyCaps() { // coding... }}函數名稱必須符合 snake_case 式的底線式命名規範。function snake_case(){ // coding...}私人的(private)方法(類/trait中)名稱必須符合 _camelCase 式的前置底線小寫開頭駝峰命名規範。class StudlyCaps{ private function _studlyCaps() { // coding... }}方法名稱 第一個單詞 為動詞。class StudlyCaps{ public function doSomething() { // coding... }}變數 必須符合 camelCase 式的小寫開頭駝峰命名規範。class StudlyCaps{ public function doSomething() { $someVariable = 'demo'; // coding... }}方法/函數 多參數時,之間要有1個空格class StudlyCaps{ public function doSomething($variableOne, $variableTwo) { // coding... }}運算子/運算式 要有一個空格$a = $b + $c;$a = $b . $c;每個 namespace 命名空間聲明語句塊 和 use 聲明語句塊後面,必須 插入一個空白行。namespace Standard;// 空一行use Test\TestClass;//use引入類// 空一行類的開始花括弧 "{ "必須 寫在函式宣告後自成一行,結束花括弧"}"也必須寫在函數主體後自成一行。class StudlyCaps{}方法/函數的開始花括弧 { 必須 寫在函式宣告後自成一行,結束花括弧 }也 必須 寫在函數主體後自成一行。class StudlyCaps{ public function studlyCaps() { // coding... }}function snake_case(){ // coding...}類的屬性和方法 必須 添加存取修飾詞(private、protected 以及 public),abstract 以及 final 必須 聲明在存取修飾詞之前,而 static 必須 聲明在存取修飾詞之後。abstract class StudlyCaps{ abstract public function studlyCaps(); final public static function studlyCapsOne() { }}控制結構的關鍵字後 必須 要有一個空格符,而調用方法或函數時則 一定不可 有。if ($valueOne === $valueTwo) { // code...}switch ($valueThree) { case 'value': // code... break; default: // code... break;}do { // code...} while ($valueFour <= 10);while ($valueFive <= 10) { // code...}for ($i = 0; $i < $valueSix; $i++) { // code...}$demo = new Demo()$demo->doSomething();do_something();控制結構的開始花括弧 { 必須 寫在聲明的同一行,而結束花括弧 } 必須 寫在主體後自成一行。if ($valueOne === $valueTwo) { // code...}switch ($valueThree) { case 'value': // code... break; default: // code... break;}do { // code...} while ($valueFour <= 10);while ($valueFive <= 10) { // code...}for ($i = 0; $i < $valueSix; $i++) { // code...}控制結構的開始左括弧後和結束右括弧前,都一定不可有空格符。if ($valueOne === $valueTwo) {// 控制結構(右邊和)左邊不加空格 // code...}編碼建議sql過長// heredoc文法$sql = <<<SQLSELECT delivery_idFROM d_testWHERE delivery_idIN (123,234)GROUP BY delivery_idHAVING SUM(send_number) <= 0;SQL;if等控制結構條件過長if ($a > 0 && $b > 0 && $c > 0 && $d > 0 && $e > 0) {}方法或函數參數大於三個換行public function tooLangFunction( $valueOne = '', $valueTwo = '', $valueThree = '', $valueFour = '', $valueFive = '', $valueSix = ''){ //coding...}鏈式操作超過兩個$this->nameTest->functionOne() ->functionTwo() ->functionThree();數組php5.4以後,使用[]$a = [ 'aaa' => 'aaa', 'bbb' => 'bbb'];/*單引號多引號字串中無變數,單引號字串中有變數,雙引號$str = 'str';$arg = "$str";聲明類或者方法或函數添加描述&屬性描述&作者*//** * 類描述 * * desc */class StandardExample{ /** * 常量描述. * * @var string */ const THIS_IS_A_CONST = ''; /** * 屬性描述. * * @var string */ public $nameTest = ''; /** * 建構函式. * * 建構函式描述 * @author name <email> * @param string $value 形參名稱/描述 * @return 傳回值類型 傳回值描述 * 傳回值類型:string,array,object,mixed(多種,不確定的),void(無傳回值) */ public function __construct($value = '') { // coding... }//api方法提供測試範例example/** * 成員方法名稱. * * 成員方法描述 * * @param string $value 形參名稱/描述 * * @example domain/api/controller/action?argu1=111&argu2=222 */public function testFunction($value = ''){ // code...}使用try...catch...try { // coding...} catch (\Exception $e) { // coding...}// 連續調用多個方法(大於3個)使用foreach// 改寫doSome為doSomethingclass StandardExample{ /** * 方法列表 * * @var array */ private $_functionList = []; public function __construct($functionList = array()) { $this->_functionList = $value; } public function doSome() { $this->functionOne(); $this->functionTwo(); $this->functionThree(); $this->functionFour(); } public function doSomething() { foreach($this->_functionList as $function) { $this->$function(); } } ...}檔案頂部進行著作權聲明// +----------------------------------------------------------------------// | Company Name xx服務// +----------------------------------------------------------------------// | Copyright (c) 2017 http://domain All rights reserved.// +----------------------------------------------------------------------// | Author: name <email>// +----------------------------------------------------------------------