Php

PHP ZendFrameworkのコーディング標準



Php Zend Frameworks Coding Standards



1.1。 前書き




1.1。 範囲

このドキュメントで提供されるディレクトリコードのフォーマットとドキュメントは、個人およびチームでの使用に参加するZend Framework向けです。また、Zend Frameworkコーディング標準を使用する多くの開発者は、コードスタイルとZendFrameworkコードが一貫しているため便利です。コーディング標準を詳細に説明するには、真の努力が必要であることは注目に値します。注:開発者は、標準で確立された標準の推奨事項よりも、最も詳細な設計レベルで重要であると考える場合があります。 Zend Frameworkコーディング標準ガイドラインは、実際のZFプロジェクトでうまく機能します。あなたは私たちに従ってすることができますライセンス用語を変更または使用するため。



ZFコーディング標準のトピックは次のとおりです。

PHPファイルファイル形式

命名規則



コーディングスタイル

ノートドキュメント


1.2。 目的

コーディング標準は、特に多くの開発者が同じプロジェクトで作業する場合、どの開発プロジェクトでも重要です。高品質のコード、バグの減少、保守の容易さを保証するためのコーディング標準。


二。 PHPファイルファイル形式


2.1。 従来型

PHPコードのみを含むファイルの場合、終了マーク( '?>')は存在できません、PHP自体は必要ありません( '?>')。そうすることで、誤って末尾に挿入されるのを防ぐことができます。対応します。

重要: によって__HALT_COMPILER() Framework ZendPHPファイルまたはそれらによって生成されたファイルに許可されるバイナリコードのコンテンツは禁止されています。この機能の使用は、一部のインストールスクリプトでのみ使用できます。


2.2。 インデント

4つのスペースで構成されるインデント、タブTABの使用を禁止します。


2.3。 最大線長

1行以内の方が適切です。つまり、ZF開発者は、コードのすべての行を維持するように努める必要があります。可能な場合は、80文字未満が長いポイントになることもありますが、最大120文字です。


2.4。 行の終わりをマークします

規則に従うように行を終了します。Unixテキストファイルの行には、単一の改行(LF)の終わりが必要です。改行は、ファイルでは10、つまり16進数の0x0Aとして表されます。

注:Appleのオペレーティングシステムのキャリッジリターン(0x0D)または(0x0D、0x0A)などのWindowsコンピューターのキャリッジリターンラインフィードの組み合わせは使用しないでください。


3.3。 命名規則


3.1。 クラス

これに対応するZendFrameworkクラス名は、常にファイルのディレクトリ構造に属し、ルートディレクトリはZF標準ライブラリ 'Zend /'、ZF特定ルート(Extras)ライブラリは 'ZendX /'、ZendFrameworkのすべてのクラスはその下にありますグレードごとに保存します。

クラス名は英数字のみを許可し、ほとんどの場合推奨されません。パス区切り文字のみに下線が引かれています(例: Zend / Db / Table.phpファイルは、クラス名Zend_Db_Tableに対応します。

クラス名に複数の単語が含まれている場合は、各単語の最初の文字を大文字にする必要があります。たとえば、「Zend_PDF」は使用できませんが、「Zend_Pdf」は使用できます。

これらの規則は、ZendFrameworkの疑似名前空間メカニズムを定義します。アプリケーションの開発者が実行可能な場合、Zend Framework PHPは名前空間の特性(存在する場合)を使用します。

クラス名の規則の例として、標準ライブラリと特殊ライブラリのクラス名を参照してください。重要:ZFは拡張ライブラリコードに依存していますが、最初の「Zend_」や「ZendX_」ではなく、標準または特別なライブラリ(プログラムコードやZendライブラリのリリースではないなど)の一部ではありません。


3.2。 ファイル名

他のすべてのファイルでは、英数字、アンダースコア、およびダッシュ( '-')のみが使用可能であり、スペースは絶対に許可されていません。

PHPコードを含むファイルは、よく知られているビュースクリプトを除いて、末尾が「.php」である必要があります。次の例には、許容可能なZendFrameworkクラスファイル名が示されています。

Zend/Db.php Zend/Controller/Front.php Zend/View/Helper/FormRadio.php

ファイル名は、クラス名に対応する上記のルールに従う必要があります。


3.3。 関数とメソッド

関数名には英数字のみを含めることができ、アンダースコアは使用できません。デジタルは許可されていますが、ほとんどの場合推奨されていません。

関数名は常に小文字で始める必要があります。関数名に複数の単語が含まれている場合は、各子の最初の文字を大文字にする必要があります。これは「こぶ」形式と呼ばれます。

通常、長い名前の使用をお勧めします。関数名は、意図と動作関数を説明するのに十分な長さである必要があります。

受け入れ可能な関数名の例は次のとおりです。

filterInput() getElementById() widgetFactory()

オブジェクト指向プログラミングの場合、インスタンス変数または静的変数は、プレフィックスとして「get」または「set」に常にアクセスできます。シングルステートモード(シングルトン)モードやファクトリ(ファクトリ)などのデザインパターンに関しては、メソッドの名前にモデルの名前を含める必要があります。これにより、全体的な動作がより多くの名前で記述されます。

'private'または 'protected'として宣言されたオブジェクト内のメソッド。名前の最初の文字は単一の下線である必要があります。これは、メソッド名にアンダースコアを使用する唯一の方法です。 'public'として宣言されている場合、アンダースコアが含まれることはありません。

グローバル関数(「浮動関数」など)は許可されていますが、ほとんどの場合推奨されません。これらの関数を静的クラスにパッケージ化することをお勧めします。


3.4。 変数

変数には英数字のみが含まれ、ほとんどの場合推奨されません。下線は使用できません。

'private'または 'protected'インスタンス変数名は単一のアンダースコアで始まる必要があります。これはプログラムでの唯一のアンダースコアの使用法であり、 'public'はアンダースコアで始まるべきではないと宣言されています。

関数名(セクション3.3を参照)に関しては、変数名は常に小文字で始まり、「ラクダ」の命名規則に従う必要があります。

通常、長い名前の使用をお勧めします。コードを理解しやすく、開発者はデータを保存する場所を知っています。小さなサイクルを除いて、「$ i」や「$ n」などの単純な名前の使用を推奨しませんでした。ループに20行を超えるコードが含まれている場合、変数名インデックスには名前を説明する意味が必要です。

3.5。 絶え間ない

定数には、英数字とアンダースコアの両方を含めることができます。定数名には数字を使用できます。

すべての文字の定数名は大文字にする必要があります。

単語の定数はアンダースコアで区切る必要があります。たとえば、EMBED_SUPPRESS_EMBED_EXCEPTIONは許可されていますが、EMBED_SUPPRESSEMBEDEXCEPTIONです。

定数は「const」である必要があります。クラスのメンバーとして定義されているため、グローバル定数の定義を「define」で使用することは強くお勧めしません。


四。 コーディングスタイル


4.1。 PHPコード分割(境界)

PHPコードは、常に完全な標準PHPタグで区切られています。

$a = 'Example String'

短いラベル()は許可されていません。ファイルにはPHPコードのみが含まれ、終了タグは使用されません(セクションB.2.1「一般」を参照)。

4.2。 ストリング


4.2.1。 文字列リテラル

テキスト文字列(変数を含まない)を一重引用符(アポストロフィ)で囲む必要がある場合:

$sql = 'SELECT `id`, `name` from `people` WHERE `name`='Fred' OR `name`='Susan''


4.2.2。 文字列リテラルには一重引用符が含まれています( ')は

文字列に二重引用符で囲む単一引用符(アポストロフィ)が含まれている場合、SQLステートメントで特に役立ちます。

$greeting = 'Hello $name, welcome back!' $greeting = 'Hello {$name}, welcome back!'

一重引用符をエスケープする場合は、読みやすいため、上記の構文をお勧めします。


4.2.3。 変数置換

これらの変数を置き換えるには、次の形式があります。

$greeting = 'Hello ${name}, welcome back!'

一貫性を保つために、この形式は許可されていません。

$company = 'Zend' . ' ' . 'Technologies'


4.2.4。 文字列の連結

読みやすさを向上させるために、前後にスペースを空けて必要な接続を行う文字列演算子。 '':

$sql = 'SELECT `id`, `name` FROM `people` ' . 'WHERE `name` = 'Susan' ' . 'ORDER BY `name` ASC '

'。'と同じようにオペレータ接続文字列では、コードを複数の励ましの行に分割することができますが、読みやすさを向上させることもできます。これらの例では、連続する各行は空白で埋める必要があります。たとえば、「=」「配置」。

array


4.3。 アレイ

4.3.1。 デジタルインデックス付き配列

インデックスを負にすることはできません

推奨配列インデックスは0から始まります。

使用時$sampleArray = array(1, 2, 3, 'Zend', 'Studio')読みやすさを向上させるために、関数宣言の配列インデックス、各間隔スペースの後にコンマがあります。

$sampleArray = array(1, 2, 3, 'Zend', 'Studio', $a, $b, $c, 56.44, $d, 500)

'array'を使用して、複数行のインデックス付き配列を宣言し、連続する各行の先頭で配置を埋めて、スペースを使用できます。

array


4.3.2。 連想配列

ステートメントが配列に関連付けられている場合、$sampleArray = array('firstKey' => 'firstValue', 'secondKey' => 'secondValue')コードを複数の行に分割し、キーと値を連続する各行の先頭にスペースで揃えるように入力することをお勧めします:

/** * Documentation Block Here */ class SampleClass { // all contents of class // necessary indented four spaces }


4.4。 カテゴリー

4.4.1。 クラス宣言

クラスに名前を付けるときのZendFrameworkの命名規則。

中かっこは、彼のパーティーの名前でクラスから開始する必要があります(「1つの真の中かっこ」形式)。

各クラスには、PHPDocumentor標準に準拠したドキュメントブロックが必要です。

必要なすべてのコードを含むクラスは、4つのスペースをインデントします。

1つのクラスの各PHPファイル。

許可されているが推奨されていないクラスに追加のコードを追加します。このドキュメントでは、クラスと他のコードを区切るためのスペースがある2行。

受け入れ可能なクラスの例を次に示します。//4599506--4419658次にここから開始します。

var


4.4.2。 クラスメンバー変数

クラスメンバーの変数名をZendFrameworkにすることに同意しました。

変数は、クラスの先頭、宣言メソッドの上で宣言する必要があります。

許可されていませんprivate (ZFはPHP 5に基づいているため)、protectedpublicを使用します。またはprivate。パブリック変数への直接アクセスは許可されていますが、推奨されていません。アクセサー(set / get)を使用することをお勧めします。


4.5。 関数とメソッド


4.5.1。 関数とメソッドの宣言

契約には、ZendFrameworkという関数名を持つfunctionという名前を付ける必要があります。

クラス内の関数はprotectedpublicでなければなりませんまたは/** * Documentation Block Here */ class Foo { /** * Documentation Block Here */ public function bar() { All contents of function // // necessary indented four spaces } }それらの可視性を宣言します。

クラスと同様に、関数名の次の行から中括弧を付けます(「1つの真の中括弧」形式)。

また、括弧で囲まれた関数名は、中間パラメーターにスペースを入れません。

グローバル関数の使用には強く反対です。

以下は、次のクラスの受け入れ可能な関数宣言の例です。

/** * Documentation Block Here */ class Foo { /** * Documentation Block Here */ public function bar(&$baz) {} }

注意: Chuanサイト(参照渡し)は、メソッド宣言で許可されている唯一のパラメーター受け渡しメカニズムです。

/** * Documentation Block Here */ class Foo { /** * WRONG */ public function bar() { return($this->bar) } /** * RIGHT */ public function bar() { return $this->bar } }

パス-通話が固く禁じられている場合。

戻り値は括弧内にないため、将来の可読性が妨げられ、送信方法がアドレッシングモードに変更されると、コードに問題が発生します。

threeArguments(1, 2, 3)


4.5.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)

呼び出しが厳しく禁止されている場合のパスバイモード。パスウェイ関数の適切な使用が宣言されている関数を参照してください。

関数を呼び出すと、パラメーターの配列を持つ関数に「array」ヒントが含まれ、読みやすさを向上させるために複数の行に分割される場合がありますが、標準の書き込み配列は引き続き適用されます。

if


4.6。 制御ステートメント


4.6.1。 if / Else / Elseif

使用elseifおよびif ($a != 2) { $a = 2 }条件ステートメントの括弧の前後の制御ステートメントにはスペースが必要です。

括弧内の条件ステートメント。演算子はスペースで区切る必要があります。これにより、論理的に分割された複数の括弧を使用して、複雑な組み合わせで条件を改善することができます。

中括弧の前と条件文は同じ行にある必要があり、最後の行に中括弧だけがあり、その内容は4つのスペースでインデントされている必要があります。

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

形式と同様に、「elseif」または「else」「if」ステートメントが含まれ、次の例の「if」構造は、「elseif」または「else」形式の規則を含む「if」ステートメントを示しています。

switch ($numPeople) { case 1: break case 2: break default: break }

場合によっては、PHPは中括弧なしでこれらのステートメントを許可しますが、コードの(ZF)標準では、それら( 'if'、 'elseif'、または 'else'ステートメント)は中括弧を使用する必要があります。

「Elseif」は許可されていますが、強くお勧めしません。「elseif」の組み合わせをサポートしています。


4.6.2。 スイッチ

構造体の「switch」内の制御ステートメントには、条件ステートメントの括弧の前後に単一のスペースが必要です。

インデントされた4つのスペースの「case」でコードをインデントするには、コードの「Switch」に4つのスペースが必要です。

switch

defaultステートメントはcase

注意: 時々、それは次のケースに失敗しますbreakステートメントを書かないでくださいreturnまたはcase非常に便利。バグを区別するために、any breakステートメント、すべてを書かないでくださいreturnまたは/** * Brief description file * * Detailed description file (if any) ... ... * * LICENSE: Some license information * * @copyright 2008 Zend Technologies * @license http://framework.zend.com/license/3_0.txt BSD License * @version $Id:$ * @link http://framework.zend.com/package/PackageName * @since File available since Release 1.5.0 */ブレークが意図的に無視されていることを示すために、その場所にはそのようなコメント「//ブレークを意図的に省略」する必要があります。


4.7。 ノートドキュメント


4.7.1。 フォーマット

すべてのドキュメントブロック( 'docblocks')は、互換性のある形式phpDocumentorである必要があります。説明されているphpDocumentor形式は、このドキュメントの範囲を超えています。詳細については、http://phpdoc.org/を参照してください。

DocBlockクラスファイルには、ファイルの先頭にすべてのファイルレベル(「ファイルレベル」)が含まれている必要があり、docblockの「クラスレベル」の各クラスの一番上に配置されます。ここではいくつかの例を示します。


4.7.2。 ファイル

各ファイルに含まれるPHPコードには、少なくとも次のラベルが含まれている必要があります。phpDocumentordocblockファイルの先頭:

/** * Class Description * Detailed description of the class (if any) ... ... * * @copyright 2008 Zend Technologies * @license http://framework.zend.com/license/ BSD License * @version Release: @root@xxxxx * @link http://framework.zend.com/package/PackageName * @since Class available since Release 1.5.0 * @deprecated Class deprecated in Release 2.0.0 */


4.7.3。 カテゴリー

各クラスには、少なくともphpDocumentorこれらのタグが含まれている必要があります。

@throws exceptionclass [description]


4.7.4。 関数

オブジェクトメソッドを含む各関数には、少なくともドキュメントに次のコンテンツブロック(docblock)が含まれている必要があります。

説明機能

すべてのパラメータ

可能なすべての戻り値

アクセスレベルが「public」、「private」、または「protected」宣言を通過したため、「@ access」を使用する必要はありません。

関数/メソッドが例外をスローする場合は、@ throwsを使用してすべての既知の例外クラスを使用します。

|_+_|


複製:https://my.oschina.net/hanjiuni/blog/347357