PHP-FIG
1).即PHP Framework Interop Group。這個組織發(fā)布推薦的規(guī)范,而不是強制規(guī)范。
2).PHP-FIG的使命是實現(xiàn)框架的互操作性拦坠。框架的互操作性指的是通過自動加載機制剩岳、接口和標(biāo)準(zhǔn)的風(fēng)格贞滨,讓框架互相合作。
3).框架之間通過接口拍棕、自動加載和標(biāo)準(zhǔn)的編碼風(fēng)格進(jìn)行合作晓铆。
PSR
1).即PHP推薦標(biāo)準(zhǔn)。這是上面的組織制定的推薦規(guī)范绰播。例如下面的規(guī)范:
- PSR-1:基本的代碼風(fēng)格
- 必須把PHP代碼放在
<?php ?>
或<??>
標(biāo)簽中骄噪。 - 編碼字符集必須是UTF-8
- 一個PHP文件可以定義類或者處理數(shù)據(jù),但是不能同時做這兩件事
- 遵循自動加載
- 類命名遵循駝峰式命名
- 常量大寫
- 方法名稱使用第一個字母小寫的駝峰式命名
- 必須把PHP代碼放在
- PSR-2:嚴(yán)格的代碼風(fēng)格
- 貫徹執(zhí)行PSR-1
- 使用四個空格縮進(jìn)
- 使用UNIX風(fēng)格換行符
- 不能使用關(guān)閉標(biāo)簽
- 每一行不能超過120個字符
- PHP關(guān)鍵字一律小寫
- 命名空間之后必須跟一個空行
- 類的定義體起始括號應(yīng)該在類命后新起一行蠢箩,類的結(jié)束括號也必須新起一行
- 方法名的括號換行方式和類一直链蕊,參數(shù)除了第一個參數(shù)前面要有空格。
- 必須聲明屬性和方法的可見性
- 控制結(jié)構(gòu)關(guān)鍵字后面的起始括號應(yīng)該和控制結(jié)構(gòu)的關(guān)鍵字寫在同一行谬泌,結(jié)束括號另起一行滔韵。例子如下
<?php
$gorilla = new \Animals\Gorilla;
$libs = new \Animals\StrawNeckedIbis;
if ($gorilla->isAwake() === true) {
do {
$gorilla->beatChest();
} while ($libs->isAsleep() === true);
$libs->flyAway();
}
- 可以使用php code sniffer檢查代碼格式
- PSR-3:日志記錄接口
- 該規(guī)范不是一系列方針,而是一個接口掌实,規(guī)定了PHP日志記錄器組件可以實現(xiàn)的方法陪蜻。
- PSR-4:自動加載
- 這個規(guī)范描述了一個標(biāo)準(zhǔn)的自動加載策略。自動加載策略是指在運行時按需查找PHP類贱鼻、接口或者形狀宴卖,并將其載入PHP解析器滋将,支持PSR-4自動加載器標(biāo)準(zhǔn)的PHP組件和框架使用同一個自動加載器就能找到相關(guān)代碼,然后將其載入PHP解釋器症昏。
- 該規(guī)范的精髓是把命名空間的前綴和系統(tǒng)中的目錄對應(yīng)起來耕渴。
- 自己實現(xiàn)psr-4自動加載器
<?php
spl_autoload_register(function ($class) {
//這個項目的命名空間前綴
$prefix = 'Foo\\Bar\\';
//這個項目命名空間前綴對應(yīng)的基目錄
$base_dir = __DIR__ . '/src/';
//參數(shù)傳入的類使用這個命名空間前綴嗎?
$len = strlen($prefix);
if (strncmp($prefix, $class, $len) != 0) {
//不使用齿兔,交給下一個自動加載器處理
return;
}
//去掉前綴的類名
$relative_class = substr($class, $len);
//把命名空間前換成基目錄
//去掉前綴中的類名橱脸,把命名空間分隔符換成目錄分隔符
//然后在后面加上.php
$file = $base_dir . str_replace('\\' , '/', $relative_class) . '.php';
if (file_exists($file)) {
require $file;
}
});
這樣的話當(dāng)我們使用\Foo\Bar\Baz\Qux
這個類的時候,使用SPL注冊了上面這個函數(shù)之后分苇,PHP就會嘗試從/path/to/project/src/Baz/Qux.php
加載這個類添诉。
專題系列
PHP專題系列目錄地址:https://github.com/xx19941215/webBlog
PHP專題系列預(yù)計寫二十篇左右,主要總結(jié)我們?nèi)粘HP開發(fā)中容易忽略的基礎(chǔ)知識和現(xiàn)代PHP開發(fā)中關(guān)于規(guī)范医寿、部署栏赴、優(yōu)化的一些實戰(zhàn)性建議,同時還有對Javascript語言特點的深入研究靖秩。