ホームページ  >  記事  >  php教程  >  Zend Framework の PHP コーディング標準

Zend Framework の PHP コーディング標準

WBOY
WBOYオリジナル
2016-06-21 08:49:49870ブラウズ

[Zend Framework 公式ドキュメントからの抜粋]

C.2. PHP ファイルのファイル形式
C.2.1. 一般
PHP コードのみを含むファイルの場合、終了マーク ("?>") は存在できません。これにより、終了マークが誤って挿入されるのを防ぐことができます。
重要: __HALT_COMPILER() によって許可される任意のバイナリ コード コンテンツは、Zend Framework の PHP ファイル、または Zend Framework によって生成されるファイルによって禁止されています。この機能は一部のインストール スクリプトでのみ使用できます。

C.2.2. インデント
インデントは 4 つのスペースで構成され、タブ文字 TAB は禁止されています。

C.2.3. 行の最大長
1 行の文字数は 80 文字未満の方が適切です。つまり、ZF 開発者は、コードの各行を可能な限り 80 文字未満に抑えるように努める必要があります。場合によっては、それより長くても問題ありませんが、最大値は 120 文字です。

C.2.4. 行末フラグ
行末マークは Unix テキスト ファイルの規則に従い、行は 1 つの改行文字 (LF) で終わる必要があります。改行文字は、ファイル内では 10、つまり 16 進数の 0x0A として表されます。
注: Apple オペレーティング システムのキャリッジ リターン (0x0D)、または Windows コンピュータのキャリッジ リターンとライン フィードの組み合わせ (0x0D、0x0A) は使用しないでください。

C.3. 命名規則
C.3.1. クラス
Zend Framework のクラス名は、常にそれが属するファイルのディレクトリ構造に対応します。ZF 標準ライブラリのルート ディレクトリは「Zend/」、ZF 特殊 (エクストラ) ライブラリのルート ディレクトリは「ZendX/」です。 、すべての Zend Framework クラスがレベル​​に応じて格納されます。
クラス名に使用できるのは英数字のみであり、ほとんどの場合、数字の使用は推奨されません。アンダースコアはパス区切り文字としてのみ使用できます。たとえば、Zend/Db/Table.php ファイル内の対応するクラス名は Zend_Db_Table です。
クラス名に複数の単語が含まれる場合は、各単語の最初の文字を大文字にする必要があります。たとえば、「Zend_PDF」は許可されませんが、「Zend_Pdf」は許可されます。
これらの規則は、Zend Framework の擬似名前空間メカニズムを定義します。 Zend Framework は、開発者がプロ​​グラムに実装できる場合、PHP 名前空間機能を採用します。
標準および特殊ライブラリのクラス名規則の例を参照してください。 重要: ZF ライブラリ拡張に依存しているが、標準または特殊ライブラリの一部ではないコード (プログラム コードや、Zend によって配布されていないライブラリなど) は、「Zend_」または「ZendX_」で始めるべきではありません。

C.3.2. ファイル名
その他のファイルでは、英数字、アンダースコア、ダッシュ (「-」) のみが使用可能であり、スペースは絶対に使用できません。
PHP コードを含むファイルは、よく知られているビュー スクリプトを除き、「.php」拡張子で終わる必要があります。次の例は、Zend Framework クラスで使用できるファイル名を示しています:
Zend/Db.php
Zend/Controller/Front.php
Zend/View/Helper/FormRadio.php
ファイル名は、上記の対応するクラス名の規則に従う必要があります。

C.3.3. 関数とメソッド
関数名には英数字のみを含める必要があり、アンダースコアは使用できません。数値は許可されていますが、ほとんどの場合推奨されません。
関数名は常に小文字で始まります。関数名に複数の単語が含まれる場合、各サブワードの最初の文字を大文字にする必要があります。これは、いわゆる「キャメルケース」形式です。
通常、長い名前を使用することをお勧めします。関数名は、関数の意図と動作を説明するのに十分な長さである必要があります。
以下は、受け入れられる関数名の例です:
filterInput()
GetElementById()
ウィジェットファクトリー()

オブジェクト指向プログラミングの場合、インスタンスや静的変数などのアクセサーには、常に「get」または「set」というプレフィックスが付けられます。シングルトンやファクトリなどのデザイン パターンの実装に関しては、名前で動作全体をより適切に説明できるように、メソッドの名前にパターンの名前を含める必要があります。
「プライベート」または「保護」として宣言されたオブジェクト内のメソッドの場合、名前の最初の文字は単一のアンダースコアである必要があります。メソッド名でのアンダースコアの使用はこれのみです。 「public」としての宣言にはアンダースコアが含まれることはありません。
グローバル関数 (「浮動関数」など) は許可されますが、ほとんどの場合、そのような関数を静的クラスにカプセル化することはお勧めできません。

C.3.4. 変数
変数には英数字のみが含まれており、ほとんどの場合、数字は推奨されず、アンダースコアは受け入れられません。
「private」または「protected」として宣言されたインスタンス変数名は、単一のアンダースコアで始まる必要があります。「public」として宣言されたインスタンス変数名は、プログラム内でアンダースコアを使用する唯一の使用法です。
関数名と同様 (上記のセクション 3.3 を参照)、変数名は常に小文字で始まり、「キャメルケース」の命名規則に従います。
通常、コードを理解しやすくし、開発者がデータの保存場所を把握できるように、長い名前を使用することをお勧めします。小さなループ以外では、「$i」や「$n」などの簡潔な名前の使用はお勧めできません。ループのコードが 20 行を超える場合は、インデックス付き変数名にわかりやすい名前を付ける必要があります。

C.3.5. 定数
定数には英数字とアンダースコアが含まれており、定数名として数字を使用できます。
定数名のすべての文字は大文字にする必要があります。
定数内の単語はアンダースコアで区切る必要があります。たとえば、EMBED_SUPPRESS_EMBED_EXCEPTION は使用できますが、EMBED_SUPPRESSEMBEDEXCEPTION は使用できません。
定数は、「const」を使用してクラスのメンバーとして定義する必要があり、「define」で定義されたグローバル定数の使用は強く推奨されません。

C.4. コーディングスタイル
C.4.1. PHP コードの境界
PHP コードは常に完全な標準 PHP タグ
で区切られます。
?>
短いタグ ( ) は許可されません。ファイルには PHP コードのみが含まれ、終了タグは含まれません (セクションC.2.1「一般」を参照)。

C.4.2. 文字列
C.4.2.1. 文字列リテラル
文字列がリテラル (変数を含まない) の場合は、一重引用符 (アポストロフィ) で囲む必要があります:
$a = '文字列の例'
;
C.4.2.2. 一重引用符 (')
を含む文字列リテラル リテラル文字列に一重引用符 (アポストロフィ) が含まれている場合は、二重引用符で囲みます。これは SQL ステートメントで特に便利です:
$sql = "SELECT `id`, `name` from `people` WHERE `name`='フレッド' OR `name`='スーザン'"; 一重引用符をエスケープする場合は、読みやすいため、上記の構文が推奨されます。

C.4.2.3. 変数の置換
変数置換には次の形式があります:
$greeting = "こんにちは、$name、おかえり!"; $greeting = "こんにちは、{$name}、おかえり!"; 一貫性を保つため、このフォームでは次のことは許可されません:
$greeting = "こんにちは ${name}、おかえり!";
C.4.2.4. 文字列の連結
文字列は、読みやすくするために前後にスペースを入れて「.」演算子を使用して連結する必要があります:
$company = 'Zend' ' ' 'テクノロジー'; 「.」演算子を使用して文字列を連結する場合は、読みやすさを向上させるためにコードを複数の行に分割することをお勧めします。これらの例では、連続する各行は「.」や「=」などの空白で埋める必要があります。 $sql = "SELECT `id`, `name` FROM `people` "
. "WHERE `名前` = 'スーザン' "
. "「名前」ASC で注文

C.4.3. 配列
C.4.3.1. 数値インデックス配列
インデックスは負の数にすることはできません。配列インデックスは 0 から始めることをお勧めします。
array 関数を使用してインデックス付き配列を宣言する場合は、読みやすくするために各カンマの後にスペースを追加します。
$sampleArray = array(1, 2, 3, 'Zend', 'Studio');
「array」を使用して複数行のインデックス付き配列を宣言し、連続する各行の先頭にスペースを埋め込むことができます。 $sampleArray = array(1, 2, 3, 'Zend', 'Studio',
$a、$b、$c、
56.44, $d, 500);
C.4.3.2. 連想配列
連想配列、配列を宣言するときは、コードを複数行に分割し、キーと値を揃えるために連続する各行の先頭にスペースを埋め込むことをお勧めします。 $sampleArray = array('firstKey' => 'firstValue',
' SecondKey' => ' SecondValue'); C.4.4. クラス
C.4.4.1. クラス宣言
Zend Framework の命名規則を使用してクラスに名前を付けます。
中括弧はクラス名の下の行から開始する必要があります (「1 つの真の中括弧」形式)。
すべてのクラスには、PHPDocumentor 標準に準拠するドキュメント ブロックが必要です。
クラス内のすべてのコードは 4 つのスペースでインデントする必要があります。
各 PHP ファイルにはクラスが 1 つだけあります。
クラスに追加のコードを入れることは許可されていますが、推奨されません。このようなファイルでは、2 行のスペースを使用してクラスを他のコードから分離します。

以下は許容可能なクラスの例です: // 459 9506 - 441 9658 次回はここから始めてください
/** 
 * ここのドキュメントブロック
 */
クラス SampleClass
{
// クラスのすべてのコンテンツ
// 4 つのスペースをインデントする必要があります
}

C.4.4.2. クラスメンバー変数
クラス メンバー変数には、Zend Framework の変数名規則を使用して名前を付ける必要があります。
変数はクラスの先頭、メソッドの上で宣言する必要があります。
var の使用は許可されていません (ZF は PHP 5 に基づいているため)。private、protected、または public を使用してください。 パブリック変数への直接アクセスは許可されていますが、推奨されません。アクセサー (set/get) を使用することをお勧めします。

C.4.5. 関数とメソッド
C.4.5.1. 関数とメソッドの宣言
関数には、Zend Framework の関数名規則を使用して名前を付ける必要があります。
クラス内の関数は、その可視性をプライベート、プロテクト、またはパブリックとして宣言する必要があります。
クラスと同様に、中括弧は関数名の後の行から始まります (「1 つの真中括弧」形式)。
関数名とパラメータを囲む括弧の間にはスペースを入れません。
グローバル関数の使用は強く推奨されません。
以下は、クラスで受け入れられる関数宣言の例です:
/** 
 * ここのドキュメントブロック
 */
クラス Foo
{
/** 
     * ここのドキュメントブロック
     */
パブリック関数 bar()
{
// 関数のすべての内容
// 4 つのスペースをインデントする必要があります
}
}
注: 参照による受け渡しは、メソッド宣言で許可される唯一のパラメーター受け渡しメカニズムです。

/** 
 * ここのドキュメントブロック
 */
クラス Foo
{
/** 
     * ここのドキュメントブロック
     */
パブリック関数バー(&$baz)
{}
}

呼び出し時に参照渡しは固く禁止されています。
戻り値を括弧で囲むことはできないため、可読性が損なわれ、将来メソッドがパスバイに変更された場合にコードに問題が発生する可能性があります。

/** 
 * ここのドキュメントブロック
 */
クラス Foo
{
/** 
     * 間違っています
     */
パブリック関数 bar()
{
return($this->bar); }

/** 
     * 右
     */
パブリック関数 bar()
{
$this->bar; を返す
}
}

C.4.5.2. 関数とメソッドの使用法
関数パラメータはカンマとその後のスペースで区切る必要があります。次の受け入れ可能な呼び出しの例は、3 つのパラメータを持つ関数です:
threeArguments(1, 2, 3); 呼び出し時にアドレスごとのメソッドは厳密に禁止されています。関数のアドレスごとのメソッドを正しく使用する方法については、「関数の宣言」セクションを参照してください。
配列パラメータを持つ関数の場合、関数呼び出しに「配列」ヒントを含めることができ、読みやすさを向上させるために複数の行に分割することができます。同時に、配列の書き方の標準も引き続き適用されます:
threeArguments(array(1, 2, 3), 2, 3); threeArguments(array(1, 2, 3, 'Zend', 'Studio',
$a、$b、$c、
56.44, $d, 500), 2, 3);
C.4.6. 制御ステートメント
C.4.6.1. if/Else/エルセイフ
if および elseif を使用した制御ステートメントでは、条件ステートメントのかっこの前後にスペースが必要です。
括弧内の条件文では、複雑な条件での論理結合を改善するために、演算子をスペースで区切る必要があります。
最初の中括弧は条件ステートメントと同じ行に配置する必要があり、最後の中括弧は最後の行に単独で配置する必要があり、内容は 4 つのスペースでインデントする必要があります。
if ($a != 2) {
$a = 2; }

「elseif」または「else」を含む「if」ステートメントの場合、形式は「if」構造と似ています。次の例は、「elseif」または「else」の形式規則を含む「if」ステートメントを示しています。 🎜> if ($a != 2) {
$a = 2; } else {
$a = 7; }

if ($a != 2) {
$a = 2; elseif ($a == 3) {
$a = 4; } else {
$a = 7; }

場合によっては、PHP ではこれらのステートメントを中括弧なしで使用できますが、(ZF) コーディング標準では、それらのステートメント (「if」、「elseif」、または「else」ステートメント) は中括弧を使用する必要があります。
「elseif」は許可されていますが、強く推奨されません。「else if」の組み合わせがサポートされています。

C.4.6.2. スイッチ
「switch」構造内の制御ステートメントには、条件ステートメントのかっこの前後に 1 つのスペースが必要です。
「switch」のコードは 4 つのスペースでインデントする必要があり、「case」のコードは 4 つのスペースでインデントする必要があります。
スイッチ ($numPeople) {
ケース 1:
休憩

ケース 2:
休憩

デフォルト:
休憩
}

switch ステートメントにはデフォルトが必要です。
注: 次の case に移行する case ステートメントにbreak または return を書かない方が便利な場合があります。 バグと区別するため、breakやreturnを記述していないcase文には、意図的にbreakを省略していることを示す「//break意図省略」のようなコメントを付ける必要があります。

C.4.7. 注釈ドキュメント
C.4.7.1. フォーマット
すべてのドキュメント ブロック (「docblock」) は phpDocumentor 形式と互換性がある必要があります。phpDocumentor 形式の説明はこのドキュメントの範囲外です。詳細については、http://phpdoc.org/ を参照してください。
すべてのクラス ファイルには、ファイルの先頭にファイル レベル (「ファイル レベル」) の docblock が含まれ、各クラスの先頭に「クラス レベル」の docblock が配置される必要があります。以下にいくつかの例を示します:

C.4.7.2. ドキュメント
PHP コードを含むすべてのファイルには、ファイルの先頭の docblock に少なくとも次の phpDocumentor タグが含まれている必要があります:
/**
* ファイルの簡単な説明
*
* ファイルの詳細な説明 (存在する場合)... ...
*
* LICENSE: 一部のライセンス情報
*
* @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/3_0.txt BSD ライセンス
* @version $Id:$
* @link http://framework.zend.com/package/PackageName
* @since ファイルはリリース 1.5.0 以降で利用可能
*/

C.4.7.3. クラス
すべてのクラスには、少なくとも次の phpDocumentor タグが含まれている必要があります:
/**
* クラスの簡単な説明
*
* クラスの詳細な説明 (ある場合)... ...
*
* @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/ BSD ライセンス
* @version リリース: @package_version@ ​​
* @link http://framework.zend.com/package/PackageName
* @since クラスはリリース 1.5.0 以降で利用可能
* @deprecated クラスはリリース 2.0.0 で非推奨になりました
​*/

C.4.7.4. 関数
オブジェクト メソッドを含むすべての関数には、少なくとも次の内容を含む docblock が必要です:
機能説明
すべてのパラメータ
考えられるすべての戻り値

アクセスレベルは「public」、「private」、または「protected」で宣言されているため、「@access」を使用する必要はありません。
関数/メソッドが例外をスローする場合は、既知の例外クラスすべてに対して @throws を使用します:
@throws 例外クラス [説明]



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。