PSR
是php standard recommendation的簡寫,它其實(shí)應(yīng)該叫psrs,即系列推薦標(biāo)準(zhǔn):目前通過的規(guī)范有psr-0(autoloading standard)、psr-1(basic coding standard)、psr-2(coding style guide)、psr-3(logger interface)、psr-4(improved autoloading)。它不是php官方標(biāo)準(zhǔn),而是從如zend、symfony2等知名php項(xiàng)目中提煉出來的一系列標(biāo)準(zhǔn),目前有越來有多的社區(qū)項(xiàng)目加入成員并遵循該標(biāo)準(zhǔn)。
PHP-FIG?— PHP Framework Interoperability Group, 是制定PSRs開發(fā)規(guī)范的組織,它的成員由很多知名PHP社區(qū)項(xiàng)目組成,在其官網(wǎng)首頁下方可以看到成員清單。這些成員制定規(guī)范,并且落實(shí)在自己的項(xiàng)目中。
其實(shí)各個(gè)PSR規(guī)范的內(nèi)容都很簡潔明了,比起那些動則幾十頁的規(guī)范,真是好太多了。
PSR-0(Autoloading Standard)
PSR-0即類自動加載規(guī)范(原文:官網(wǎng)、GitHub)。從2014-10-21日起,該規(guī)范被標(biāo)記為Deprecated,由PSR-4替代。它的內(nèi)容十分簡潔。
內(nèi)容:
立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
一個(gè)完全合格的命名空間和類名必須有以下的結(jié)構(gòu)“\
每個(gè)命名空間必須有頂級的命名空間(“Vendor Name”)
每個(gè)命名空間可以有任意多個(gè)子命名空間
每個(gè)命名空間在被從文件系統(tǒng)加載時(shí)必須被轉(zhuǎn)換為“操作系統(tǒng)路徑分隔符”(DIRECTORY_SEPARATOR?)
每個(gè)“_”字符在“類名”中被轉(zhuǎn)換為DIRECTORY_SEPARATOR 。“_”符號在命名空間中沒有明確含義
符合命名標(biāo)準(zhǔn)的命名空間和類名必須以“.php”結(jié)尾來加載文件
Vendor Name,命名空間,類名可以由大小寫字母組成,其中命名空間和類名是大小寫敏感的以保證多系統(tǒng)兼容性
PSR-1(Basic Coding Standard)
PSR-1即基礎(chǔ)編碼標(biāo)準(zhǔn)(原文:官網(wǎng)、GitHub)。內(nèi)榮也十分簡潔,包含了類文件、類名、類方法名的命名方法。
內(nèi)容:
立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
源文件必須只使用?
源文件中php代碼的編碼格式必須只使用不帶BOM的UTF-8
一個(gè)源文件建議只用來做聲明(類,函數(shù),常量等)或者只用來做一些引起副作用的操作(例如:輸出信息,修改.ini配置文件等),但不應(yīng)該同時(shí)做這兩件事
命名空間和類必須遵守PSR-0標(biāo)準(zhǔn)
類名必須使用StudlyCaps寫法
類中的常量必須只由大寫字母和下劃線(_)組成
方法名必須使用cameCase寫法
PSR-2(Coding Style Guide)
PSR-2即編碼風(fēng)格標(biāo)準(zhǔn)(原文:官網(wǎng)、GitHub)。內(nèi)容就稍多,但還是比較簡潔,它以PSR-1為基礎(chǔ),包含了縮進(jìn)、每行代碼長度、換行、方法可見性聲明、空格和方法體大括號換行的相關(guān)規(guī)定。
標(biāo)準(zhǔn)內(nèi)容:
代碼必須遵守?PSR-1
代碼必須使用4個(gè)空格來進(jìn)行縮進(jìn),而不是用制表符
一行代碼的長度不應(yīng)有硬限制;軟限制必須為120個(gè)字符,建議每行代碼80個(gè)字符或者更少
在命名空間的聲明下面必須有一行空行,并且在use的聲明下面也必須有一行空行
類的左花括號必須放到其聲明下面自成一行,右花括號則必須放到類主體下面自成一行
方法的左花括號必須放到其聲明下面自成一行,右花括號則必須放到方法主體的下一行
所有的屬性和方法必須有可見性聲明;abstract和final聲明必須在可見性聲明之前;而static聲明必須在可見性聲明之后
在結(jié)構(gòu)控制關(guān)鍵字的后面必須有一個(gè)空格;而方法和函數(shù)調(diào)用時(shí)后面不可有空格
結(jié)構(gòu)控制的左花括號必須跟其放在同一行,右花括號必須放在該結(jié)構(gòu)控制代碼主體的下一行
控制結(jié)構(gòu)的左括號之后不可有空格,右括號之前也不可有空格
PSR-3(Logger Interface)
PSR-3是對應(yīng)用日志類的通過接口的定義(原文:官網(wǎng)、GitHub)。內(nèi)容很簡單,就是一個(gè)接口,官方示例代碼引用一下就好了。當(dāng)然,在具體的應(yīng)用中,只要遵循該接口,肯定可以定制相應(yīng)的實(shí)現(xiàn)。
基礎(chǔ)內(nèi)容:
LoggerInterface暴露八個(gè)接口用來記錄八個(gè)等級(debug, info, notice, warning, error, critical, alert, emergency)的日志。
第 九個(gè)方法是log,接受日志等級作為第一個(gè)參數(shù)。用一個(gè)日志等級常量來調(diào)用這個(gè)方法必須和直接調(diào)用指定等級方法的結(jié)果一致。用一個(gè)本規(guī)范中未定義且不為具 體實(shí)現(xiàn)所知的日志等級來調(diào)用該方法必須拋出一個(gè)Psr\Log\InvalidArgumentException。不推薦使用自定義的日志等級,除非你 非常確定當(dāng)前類庫對其有所支持。
PSR-4(Improved Autoloading)
PSR-4即改進(jìn)版的自動加載規(guī)范(原文:官網(wǎng)、GitHub)。它是PSR-0規(guī)范的接替者。它可以與任何其它的自動加載規(guī)范兼容,包括PSR-0。
內(nèi)容:
立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
術(shù)語「類」是一個(gè)泛稱;它包含類,接口,traits 以及其他類似的結(jié)構(gòu);
完全限定類名應(yīng)該類似如下范例:
完全合規(guī)類名必須有一個(gè)頂級命名空間(Vendor Name)
完全合規(guī)類名可以有多個(gè)子命名空間
完全合規(guī)類名應(yīng)該有一個(gè)終止類名
下劃線在完全合規(guī)類名中是沒有特殊含義的
字母在完全合規(guī)類名中可以是任何大小寫的組合
所有類名必須以大小寫敏感的方式引用
當(dāng)從完全合規(guī)類名載入文件時(shí):
在完全合規(guī)類名中,連續(xù)的一個(gè)或幾個(gè)子命名空間構(gòu)成的命名空間前綴(不包括頂級命名空間的分隔符),至少對應(yīng)著至少一個(gè)基礎(chǔ)目錄
在「命名空間前綴」后的連續(xù)子命名空間名稱對應(yīng)一個(gè)「基礎(chǔ)目錄」下的子目錄,其中的命名 空間分隔符表示目錄分隔符。子目錄名稱必須和子命名空間名大小寫匹配
終止類名對應(yīng)一個(gè)以 .php 結(jié)尾的文件。文件名必須和終止類名大小寫匹配
自動載入器的實(shí)現(xiàn)不可拋出任何異常,不可引發(fā)任何等級的錯(cuò)誤;也不應(yīng)返回值
PHP怎么學(xué)習(xí)?PHP怎么入門?PHP在哪學(xué)?PHP怎么學(xué)才快?不用擔(dān)心,這里為大家提供了PHP速學(xué)教程(入門到精通),有需要的小伙伴保存下載就能學(xué)習(xí)啦!
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://m.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號