1.FIG-PHPとPSRの紹介
FIG-PHPはPSRと呼ばれる一連のPHP開発仕様を策定しています。ここでFIGはFramework Interoperability Group(Framework Interoperability Group)の略で、PSRはPHP Standard Recommendationです。の略称。 FIG-PHP ワーキング グループは、プロジェクトの代表者が 2 つのプロジェクト間の共通点について話し合い、協力する方法を見つけたときに始まりました。主な視聴者は 2 つのプロジェクト チームですが、PHP コミュニティの他のメンバーも視聴しています。他の人がここの仕様を採用したい場合は歓迎しますが、これは作業グループの目標ではありません。チームの誰もアプリケーションの構築方法を教えてくれません。
2015.07 の時点で、合計 5 つの PSR 仕様文書がリリースされています:
PSR-0 自動ローディング (2014.10.21 に廃止、代替仕様は PSR-4)
PSR-1 基本コーディング仕様
PSR- 2 コーディングスタイル
PSR-3 ログインターフェイス
PSR-4 自動読み込みの改善
PSR-7 HTTP メッセージインターフェイス
以下では、これらの仕様を複数のシリーズに分けて学習します。ドキュメントはシリーズ 1 です。
2. PSR-1: 基本コーディング仕様
この仕様では、将来コードを共有する際に、さまざまなコードが高度な技術的相互運用性を持つことができるように、いくつかの基本的なコーディング仕様について説明します。
この仕様における MUST、MUST NOT、SHOULD、SHOULD NOT、MAY などのキーワードの意味は、RFC 2119 に記載されています。
ソース ファイルでは
ソース ファイル内の PHP コードのエンコード形式は、バイト オーダー マーク (BOM) のない UTF-8 のみを使用する必要があります。注: BOM の詳細については、参考資料 [BOM] を参照してください。
ソース ファイルは宣言 (クラス、関数、定数など) または一部の補助操作 (例: 情報の出力、.ini 設定の変更など) にのみ使用することが推奨されますが、使用すべきではありません (SHOULD NOT)。両方を同時に行います。
名前空間とクラスは、PSR 自動読み込み仕様: PSR-0 または PSR-4 に従う必要があります。 (翻訳者注: PSR-0 は廃止されたため、これは実際には PSR-4 仕様に従うことと同等です。)
クラス名は StudlyCaps を使用して記述する必要があります。
(訳者注: 参考文献 [StudlyCaps] を参照。StudlyCaps は大文字と小文字を任意に変更でき、一部の文字は無視できる書き方です。たとえば、メッセージが大文字と小文字で隠される場合があります。たとえば、「 ShoEboX」の大文字は「SEX」、小文字の祖母は「hobo」と綴ることができ、Web メール サービス プロバイダーの Hotmail は元々 HoTMaiL と書かれ、大文字は HTML と綴ることができます。)
クラス内の定数は次のもののみで構成されます。大文字とアンダースコア (_)。
メソッド名はcamelCase(キャメルケース)で記述する必要があります。
PHP コードでは長いタグ () または短い出力タグ (= ?>) のみを使用する必要があります。その他のタグ。
PHP コードのエンコーディング形式は、バイト オーダー マーク (BOM) のない UTF-8 のみを使用する必要があります。
ソース ファイルは、宣言 (クラス、関数、定数など) のみ、または一部の補助操作 (例: 情報の出力、.ini 構成の変更など) のみに使用することをお勧めします。 .) ですが、これら 2 つのことを同時に行うことはお勧めできません。
フレーズの副作用とは、宣言 (クラス、関数、定数など) に直接関係しない実行ロジックを意味します。
(訳者注: [PSR-1-翻訳 1] では副作用が副作用と訳され、[PSR-1-翻訳 2] では従属効果と訳されています。どちらも意味不明です。訳文ここにはもっと良い補助効果があるはずです)。
(翻訳者注: 原文では「単にファイルを含めるだけで」が何を意味するのかわかりません。後で確認することにします)。
補助機能には、出力の生成、require または include の明示的な使用、外部サービスへの接続、ini 構成の変更、エラーまたは例外のトリガー、グローバル変数または静的変数の変更、ファイルの読み取りまたは変更などが含まれますが、これらに限定されません。
以下は、宣言と補助関数の両方を含むファイルの例です。つまり、避けるべき例です。
<?php// 副作用:修改了ini配置ini_set('error_reporting', E_ALL);// 副作用:载入了文件include "file.php";// 副作用:产生了输出echo "<html>\n";// 声明function foo(){ // 函数体}
以下は、宣言のみを含むファイルの例です。昇格する必要があります:
<?php// 声明function foo(){ // 函数体}// 条件式声明不算做是辅助作用if (! function_exists('bar')) { function bar() { // 函数体 }}
名前空間とクラスは自動読み込み仕様 PSR-0 または PSR-4 に従う必要があります。
これは、ソース ファイルが 1 つだけであることを意味します クラス (class) が存在します、名前空間内に少なくとも 1 つのレベル、つまり最上位の組織名 (ベンダー名) が必要です。
クラス名は StudlyCaps を使用して記述する必要があります。
PHP5.3 以降のコードは正式な名前空間を使用する必要があります
例:
<?php// PHP 5.3 及之后:namespace Vendor\Model;class Foo{}
PHP5.2.x之前的代码建议用伪命名空间Vendor_作为类名(class name)的前缀
<?php// PHP 5.2.x 及之前:class Vendor_Model_Foo{}
术语类(class)指所有的类(class),接口(interface)和trait。
类常量必须(MUST)只由大写字母和下划线(_)组成。 例子:
<?phpnamespace Vendor\Model;class Foo{ const VERSION = '1.0'; const DATE_APPROVED = '2012-06-01';}
类的属性命名可以遵循$StulyCaps,$camelCase或者$under_score中的某一种风格,本规范不做强制要求,但无论遵循哪种命名方式,都应当(SHOULD)在一定的范围内保持一致。这个范围可以是整个团队、整个包、整个类或整个方法。
方法名必须(MUST)使用camelCase风格来声明。
[BOM] 一个bom头引发的血案,
[PHP-FIG] php-fig, http://www.php-fig.org/
[PSR-1-翻译1] PSR-1基本代码规范, https://github.com/hfcorriez/fig-standards/blob/zh_CN/%E6%8E%A5%E5%8F%97/PSR-1-basic-coding-standard.md
[PSR-1-翻译2] PHP PSR-1 基本代码规范(中文版), http://segmentfault.com/a/1190000002521577
[PSR-4] FIG-PHP PSR规范系列4-自动加载,
[RFC2119] Key words for use in RFCs to Indicate Requirement Levels, March 1997, http://www.ietf.org/rfc/rfc2119.txt
[RFC2119-阮一峰] RFC2119:表示要求的动词, http://www.ruanyifeng.com/blog/2007/03/rfc2119.html
[StudlyCaps] Studly caps, https://en.wikipedia.org/wiki/Studly_caps