這篇文章主要介紹了關於php大牛分享:php代碼編寫的規範,總結的很全,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
一直以來,php都是Web開發中使用最頻繁的程式設計語言,也正因為如此,眾多的從業者,導致了很多不規範的代碼。
PHP-FIG(PHP架構介面組織)制定了一整套完善的標準,推薦給廣大的php開發使用。
一共制定了五套標準:
(PSR: PHP推薦標準)
PSR-1: 基本的代碼風格;
PSR-2: 嚴格的代碼風格;
PSR-3: 日誌記錄器介面;
PSR-4: 自動載入
其實還有一個PSR-0,不過已被PSR-4代替了,所以不存在 PSR-0版本。
一、PSR-1:基本代碼風格
1. 標籤: 必須要把php代碼寫在 <?php 和 ?>, 或者 <?= 和 ?>標籤中,不得使用其它格式的標籤;
2. 編碼: 必須採用無BOM頭的UTF-8字元集,目前大多數的IDE編輯器都自動支援;
3. 類名: 必須採用駝峰式: CamelCase,這種格式也叫標題式,例如: IndexController;
4. 常量: 必須採用大寫字母,多個單詞之間採用底線串連: APP_PATH;
5. 方法: 必須採用小駝峰式: camelCase(),例如: getStatus();
二、PSR-2: 嚴格的代碼風格
1. 代碼必須首先符合PSR-1的規範;
2. 縮排: 必須統一採用四個空格;
3. 換行: 必須使用UNIX換行風格;
4. 結尾: 必須要有一個空行,並且不允許有關閉標籤 ?>;
5. 每行代碼不超過80字元,最多不能超過120個字元;
6. 關鍵字全部使用小寫字母,例如: true,false,use....;
7. 命名空間:後面必須緊跟一個空行;
8. use匯入空間後,也必須緊跟一個空行;
9. 類的起始括弧{, 必行另起一行;
10. 方法與函數的起始括弧{,也必須另起一行;
11. 類中所有成員,必須聲明可見度:public, protected,private;
12. 類中成員的特徵: abstract, final, 必須放在可見度聲明之前;
13. static 關鍵字,必須放在類成中的可見度聲明之後;
14. 控制結構的起始括弧必須與語句在同一行,例如: if () {};
15. 控制結構的參數之間,逗號之後必須要有空格,例如:($m, $n);
三、PSR-3: 日誌記錄介面
這個規範與前面的規範不同,它不是一個推薦標準,而是一個介面標準,規則了日誌記錄器可以實現的方法。
只要遵循這個標準,就必須實現以下9個方法:
<?phpnamespace Psr\Log;interface LoggerInterface{public function emergency($message, array $context=[]);public function alert($message, array $context=[]);public function critical($message, array $context=[]);public function error($message, array $context=[]);public function warning($message, array $context=[]);public function notice($message, array $context=[]);public function info($message, array $context=[]);public function debug($message, array $context=[]);public function log($level, $message, array $context=[]);}
四、PSR-4: 自動載入器
1. 為什麼要有自動載入器?
之前一個php指令碼中,可能會載入大量的檔案:
<?php include 'demo1.php';include 'demo2.php';include 'demo3.php';......
有了自動載入器,就可以根據功能,按需載入。
在沒有該標準之前, 我們可以通過__autoload()和spl_autoload_register()進行載入器註冊,現在可以藉助命名空間實現自動載入。
2. 自動載入原理
主要是將類,介面,trait等所在檔案路徑,與代碼的命名空間進行映射,使之一一對應,賦予了命名空間第二次生命。
例如:
<?phpnamespace app\controller;class UserController{//代碼}
說明:
1. 類名: app\controller\UserController;
2. 類檔案與類同名: app/controller/UserController.php
3. 類名與類檔案名稱,通過命名空間進行映射:
<?phpdefine('ROOT_PATH', __DIR__);spl_autoload_register(function($className){require ROOT_PATH . '/' . str_replace('\\','/', $className) . '.php';});
4. 將類名與命名空間進行關聯,是現代php開發架構的基礎,composer也是基於此實現了組件自動載入;
更多的編程規範,可以登入php中文網(www.php.cn)查閱。