サーチ…
前書き
PSR (PHP Standards Recommendation)は、 FIG (Framework Interop Group)によってまとめられた一連の推奨事項です。
「グループの背後にあるアイデアは、プロジェクト代表者がプロジェクト間の共通点について話し合い、一緒に働く方法を見つけることです」 - FIG FAQ
PSRは、Accepted、Review、Draft、またはDeprecatedのいずれかの状態になります。
PSR-4:オートローダ
PSR-4は、ファイル名によるクラスの自動ロードの標準を概説する受け入れられた勧告です。この推奨は、以前のPSR-0の代わりに推奨されています 。
完全修飾クラス名は、次の要件と一致する必要があります。
\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
- 最上位ベンダーの名前空間(例:
Alphabet
) - 1つまたは複数のサブネームスペース(例:
Google\AdWord
) - 終了クラス名(例:
KeywordPlanner
)を含む必要があります。
最終的なクラス名はAlphabet\Google\AdWord\KeywordPlanner
です。完全修飾クラス名も意味のあるファイルパスに変換する必要があります。したがって、 Alphabet\Google\AdWord\KeywordPlanner
は[path_to_source]/Alphabet/Google/AdWord/KeywordPlanner.php
PHP 5.3.0以降、 カスタムオートローダー関数を定義して、定義したパスとファイル名のパターンに基づいてファイルをロードできます。
# Edit your php to include something like:
spl_autoload_register(function ($class) { include 'classes/' . $class . '.class.php';});
場所( 'classes /')とファイル名拡張子( '.class.php')を構造体に適用される値に置き換えます。
ComposerパッケージマネージャーはPSR-4をサポートしています。これは、標準に従えば、Composerのベンダーオートローダーを使用してプロジェクト内のクラスを自動的にロードできることを意味します。
# Edit the composer.json file to include
{
"autoload": {
"psr-4": {
"Alphabet\\": "[path_to_source]"
}
}
}
オートローダーファイルを再生成する
$ composer dump-autoload
あなたのコードで次のことができます:
<?php
require __DIR__ . '/vendor/autoload.php';
$KeywordPlanner = new Alphabet\Google\AdWord\KeywordPlanner();
PSR-1:基本的なコーディング標準
PSR-1は容認された勧告であり、コードの記述方法に関する基本的な標準勧告の概要を示しています。
- クラス、メソッド、定数の名前付けに関する概要を説明しています。
- それは、PSR-0またはPSR-4勧告を要件とすることを要件とする。
- これは、使用するPHPタグを示します。
<?php
および<?=
ではなく<?
。 - 使用するファイルエンコーディング(UTF8)を指定します。
- また、ファイルは新しいシンボル(クラス、関数、定数など)を宣言し、その他の副作用を起こさないか、副作用のあるロジックを実行してシンボルを定義しないでください。
PSR-8:Huggableインターフェイス
PSR-8は、2014年4月1日にラリー・ガーフィールド(Larry Garfield ) がエイプリルフールズのジョークとして提案したスプーフィングPSR( 現在はドラフト中 )です。
このドラフトでは、オブジェクトをHuggable
にするためのインタフェースの定義方法の概要を説明します。
コードの概要からの抜粋:
<?php
namespace Psr\Hug;
/**
* Defines a huggable object.
*
* A huggable object expresses mutual affection with another huggable object.
*/
interface Huggable
{
/**
* Hugs this object.
*
* All hugs are mutual. An object that is hugged MUST in turn hug the other
* object back by calling hug() on the first parameter. All objects MUST
* implement a mechanism to prevent an infinite loop of hugging.
*
* @param Huggable $h
* The object that is hugging this object.
*/
public function hug(Huggable $h);
}