<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                [TOC=2] ## 1.概述 * 代碼必須遵循“編碼風格指南”PSR [ PSR-1 ]。 * 代碼必須使用 4 個空格進行縮進,而不是制表符。 * 線路長度不得有硬性限制 ; 軟限制必須是 120 個字符; 線條不應該是 80 個字符或更少。 * `namespace` 聲明后必須有一個空行,并且在聲明塊之后必須有一個空行 `use`。 * 打開類的大括號必須在下一行,并且關閉大括號必須在主體后面的下一行。 * 打開方法的括號必須在下一行,并且關閉括號必須在主體后面的下一行。 * 必須在所有屬性和方法上聲明可見性 ; `abstract`并且 `final` 必須在能見度之前宣布 ; `static `必須在能見度后宣布。 * 控制結構關鍵字必須在它們之后有一個空格 ; 方法和函數調用絕不可以。 * 控制結構的開口括號必須在同一條線上,并且關閉括號必須在主體后面的下一行。 * 控制結構的開括號必須在它們后面沒有空格,并且控制結構的右括號之前不能有空格。 ### 1.1 例 此示例包含以下一些規則作為快速概述: ~~~php <?php namespace Vendor\Package; use FooInterface; use BarClass as Bar; use OtherVendor\OtherPackage\BazClass; class Foo extends Bar implements FooInterface { public function sampleMethod($a, $b = null) { if ($a === $b) { bar(); } elseif ($a > $b) { $foo->bar($arg1); } else { BazClass::bar($arg2, $arg3); } } final public static function bar() { // method body } } ~~~ ## 2.一般 ### 2.1 基本編碼標準 * 代碼必須遵循 PSR-1 中列出的所有規則。 ### 2.2 檔 * 所有 PHP 文件必須使用 Unix LF(換行)行結尾。 * 所有 PHP 文件必須以一個空行結束。 * `?>` 必須從僅包含 PHP 的文件中省略結束標記。 ### 2.3 行 * 線路長度不得有硬性限制。 * 線路長度的軟限制必須是 120 個字符 ; 自動樣式檢查器必須發出警告 , 但絕不能在軟限制上出錯。 * 行不應超過 80 個字符 ; 超過的行應該被分成多個后續行,每行不超過 80 個字符。 * 在非空白行的末尾不得有尾隨空格。 * 可以添加空行以提高可讀性并指示相關的代碼塊。 * 每行不得超過一個語句。 ### 2.4 縮進 * 代碼必須使用 4 個空格的縮進,并且不得使用制表符進行縮進。 Nb:僅使用空格,而不是將空格與制表符混合,有助于避免差異,補丁,歷史記錄和注釋的問題 。空間的使用還使得易于插入細粒度的子壓痕用于線間對齊。 ### 2.5 關鍵字和真/假/空 * PHP 關鍵字必須是小寫的。 * PHP 的常量 true ,false 以及 null 必須是小寫。 ## 3.命名空間和使用聲明 * 如果存在, `namespace` 聲明后必須有一個空行。 * 如果存在,所有 `use` 聲明必須在 `namespace`聲明之后。 * `use` 每個聲明必須有一個關鍵字。 * 在 `use` 塊之后必須有一個空白行。 例如: ~~~php <?php namespace Vendor\Package; use FooClass; use BarClass as Bar; use OtherVendor\OtherPackage\BazClass; // ... additional PHP code ... ~~~ ## 4.類,屬性和方法 * 術語“class”指的是所有類,接口和特征。 ### 4.1 擴展和實施 * 在 `extends` 和 `implements` 關鍵字必須在同一行中聲明的類名。 * 班級的開口支架必須自成一線; 班級的結束括號必須在身體后面的下一行。 ~~~php <?php namespace Vendor\Package; use FooClass; use BarClass as Bar; use OtherVendor\OtherPackage\BazClass; class ClassName extends ParentClass implements \ArrayAccess, \Countable { // constants, properties, methods } ~~~ * `implementsMAY` 列表分為多行,每行后續行縮進一次。這樣做時,列表中的第一項必須在下一行,并且每行必須只有一個接口。 ~~~php <?php namespace Vendor\Package; use FooClass; use BarClass as Bar; use OtherVendor\OtherPackage\BazClass; class ClassName extends ParentClass implements \ArrayAccess, \Countable, \Serializable { // constants, properties, methods } ~~~ ### 4.2 屬性 * 必須在所有屬性上聲明可見性。 * 該 `var` 關鍵字不能被用于聲明屬性。 * 每個語句不得超過一個屬性。 * 屬性名稱不應以單個下劃線為前綴,以表示受保護或私有可見性。 屬性聲明如下所示。 ~~~php <?php namespace Vendor\Package; class ClassName { public $foo = null; } ~~~ ### 4.3 方法 * 必須在所有方法上聲明可見性。 * 方法名稱不應以單個下劃線為前綴,以指示受保護或私有可見性。 * 方法名稱不得在方法名稱后面用空格聲明。在括弧必須繼續自己的路線,和右括號必須繼續下去了下一行后的身體。在左括號后面不能有空格,并且在右括號之前不能有空格。 方法聲明如下所示。請注意 括號,逗號,空格和大括號的位置: ~~~php <?php namespace Vendor\Package; class ClassName { public function fooBarBaz($arg1, &$arg2, $arg3 = []) { // method body } } ~~~ ### 4.4 方法參數 * 在參數列表中,每個逗號前不得有空格,每個逗號后必須有一個空格。 * 具有默認值的方法參數必須位于參數列表的末尾。 ~~~php <?php namespace Vendor\Package; class ClassName { public function foo($arg1, &$arg2, $arg3 = []) { // method body } } ~~~ * 參數列表可以分為多行,每行后續行縮進一次。這樣做時,列表中的第一項必須在下一行,并且每行必須只有一個參數。 * 當參數列表分成多行時,右括號和左括號必須放在一起,它們各自之間有一個空格。 ~~~php <?php namespace Vendor\Package; class ClassName { public function aVeryLongMethodName( ClassTypeHint $arg1, &$arg2, array $arg3 = [] ) { // method body } } ~~~ ### 4.5 abstract , final , and static * 如果存在,`abstract` 并 `final` 聲明必須先于知名度聲明。 * 如果存在, `static` 聲明必須在可見性聲明之后。 ~~~php <?php namespace Vendor\Package; abstract class ClassName { protected static $foo; abstract protected function zim(); final public static function bar() { // method body } } ~~~ ### 4.6 方法和函數調用 * 在進行方法或函數調用時,方法或函數名稱與左括號之間不能有空格,在左括號后面不能有空格,并且在右括號之前不能有空格。在參數列表中,每個逗號前不得有空格,每個逗號后必須有一個空格。 ~~~php <?php bar(); $foo->bar($arg1); Foo::bar($arg2, $arg3); ~~~ * 參數列表可以分為多行,每行后續行縮進一次。這樣做時,列表中的第一項必須在下一行,并且每行必須只有一個參數。 ~~~php <?php $foo->bar( $longArgument, $longerArgument, $muchLongerArgument ); ~~~ ## 5.控制結構 控制結構的一般樣式規則如下: * 控制結構關鍵字后面必須有一個空格 * 在左括號后面不能有空格 * 在右括號之前不能有空格 * 在右括號和左括號之間必須有一個空格 * 結構體必須縮進一次 * 閉合支撐必須在身體后面的下一行 * 每個結構的主體必須用括號括起來。這標準化了結構的外觀,并減少了在新線被添加到身體時引入錯誤的可能性。 ### 5.1 if,elseif,else if 結構如下所示。注意括號,空格和大括號的位置; 并且else與 早期身體elseif的右大括號位于同一條線上。 ~~~php <?php if ($expr1) { // if body } elseif ($expr2) { // elseif body } else { // else body; } ~~~ elseif 該使用關鍵字而不是 else if 所有控件關鍵字看起來像單個單詞。 ### 5.2 switch,case 一個 switch 結構如下所示。請注意括號,空格和大括號的位置。的 case 語句必須一次縮進從 switch 和 break 關鍵字(或其它終端關鍵字)必須在相同的水平縮進 case 機構。必須有一個評論,例如 ~~~php // no break在非空case體中有意識地跌倒時。 <?php switch ($expr) { case 0: echo 'First case, with a break'; break; case 1: echo 'Second case, which falls through'; // no break case 2: case 3: case 4: echo 'Third case, return instead of break'; return; default: echo 'Default case'; break; } ~~~ ### 5.3 while, do while 一個 while 聲明如下所示。請注意括號,空格和大括號的位置。 ~~~php <?php while ($expr) { // structure body } ~~~ 同樣,do while語句如下所示。請注意括號,空格和大括號的位置。 ~~~php <?php do { // structure body; } while ($expr); ~~~ ### 5.4 for 一個 for 聲明如下所示。請注意括號,空格和大括號的位置。 ~~~php <?php for ($i = 0; $i < 10; $i++) { // for body } ~~~ ### 5.5 foreach 一個 foreach 聲明如下所示。請注意括號,空格和大括號的位置。 ~~~php <?php foreach ($iterable as $key => $value) { // foreach body } ~~~ ### 5.6 try catch 一個 try catch 塊如下所示。請注意括號,空格和大括號的位置。 ~~~php <?php try { // try body } catch (FirstExceptionType $e) { // catch body } catch (OtherExceptionType $e) { // catch body } ~~~ ## 6.關閉 * 閉包必須在 function 關鍵字后面用空格聲明,并在關鍵字前后加一個空格 use。 * 開口支撐必須在同一條線上,并且閉合支撐必須在身體后面的下一行。 * 在參數列表或變量列表的左括號之后不能有空格,并且在參數列表或變量列表的右括號之前不能有空格。 * 在參數列表和變量列表中,每個逗號前不能有空格,每個逗號后必須有一個空格。 * 具有默認值的閉包參數必須位于參數列表的末尾。 閉包聲明如下所示。請注意括號,逗號,空格和大括號的位置: ~~~php <?php $closureWithArgs = function ($arg1, $arg2) { // body }; $closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) { // body }; ~~~ * 參數列表和變量列表可以分為多行,每行后續行縮進一次。這樣做時,列表中的第一項必須在下一行,并且每行必須只有一個參數或變量。 * 當結束列表(無論是參數還是變量)被分割成多行時,右括號和左括號必須放在一起,并且它們之間有一個空格。 以下是包含和不包含參數列表的閉包的示例,以及跨多行分割的變量列表。 ~~~php <?php $longArgs_noVars = function ( $longArgument, $longerArgument, $muchLongerArgument ) { // body }; $noArgs_longVars = function () use ( $longVar1, $longerVar2, $muchLongerVar3 ) { // body }; $longArgs_longVars = function ( $longArgument, $longerArgument, $muchLongerArgument ) use ( $longVar1, $longerVar2, $muchLongerVar3 ) { // body }; $longArgs_shortVars = function ( $longArgument, $longerArgument, $muchLongerArgument ) use ($var1) { // body }; $shortArgs_longVars = function ($arg) use ( $longVar1, $longerVar2, $muchLongerVar3 ) { // body }; ~~~ >[danger] 請注意,當函數或方法調用中的閉包直接用作參數時,格式設置規則也適用。 ~~~php <?php $foo->bar( $arg1, function ($arg2) use ($var1) { // body }, $arg3 ); ~~~ ## 7.結論 * 本指南有意省略了許多風格和實踐元素。這些包括但不限于: * 全局變量和全局常量的聲明 * 職能宣言 * 運營商和任務 * 線間對齊 * 評論和文檔塊 * 類名前綴和后綴 最佳做法 未來的建議可能會修訂和擴展本指南,以解決風格和實踐中的那些或其他元素。 ## 附錄A 調查 在撰寫本風格指南時,該小組對成員項目進行了調查,以確定常見做法。該調查在此保留給后人。 ### A.1 調查數據 ~~~php url,http://www.horde.org/apps/horde/docs/CODING_STANDARDS,http://pear.php.net/manual/en/standards.php,http://solarphp.com/manual/appendix-standards.style,http://framework.zend.com/manual/en/coding-standard.html,https://symfony.com/doc/2.0/contributing/code/standards.html,http://www.ppi.io/docs/coding-standards.html,https://github.com/ezsystems/ezp-next/wiki/codingstandards,http://book.cakephp.org/2.0/en/contributing/cakephp-coding-conventions.html,https://github.com/UnionOfRAD/lithium/wiki/Spec%3A-Coding,http://drupal.org/coding-standards,http://code.google.com/p/sabredav/,http://area51.phpbb.com/docs/31x/coding-guidelines.html,https://docs.google.com/a/zikula.org/document/edit?authkey=CPCU0Us&hgd=1&id=1fcqb93Sn-hR9c0mkN6m_tyWnmEvoswKBtSc0tKkZmJA,http://www.chisimba.com,n/a,https://github.com/Respect/project-info/blob/master/coding-standards-sample.php,n/a,Object Calisthenics for PHP,http://doc.nette.org/en/coding-standard,http://flow3.typo3.org,https://github.com/propelorm/Propel2/wiki/Coding-Standards,http://developer.joomla.org/coding-standards.html voting,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,no,no,no,?,yes,no,yes indent_type,4,4,4,4,4,tab,4,tab,tab,2,4,tab,4,4,4,4,4,4,tab,tab,4,tab line_length_limit_soft,75,75,75,75,no,85,120,120,80,80,80,no,100,80,80,?,?,120,80,120,no,150 line_length_limit_hard,85,85,85,85,no,no,no,no,100,?,no,no,no,100,100,?,120,120,no,no,no,no class_names,studly,studly,studly,studly,studly,studly,studly,studly,studly,studly,studly,lower_under,studly,lower,studly,studly,studly,studly,?,studly,studly,studly class_brace_line,next,next,next,next,next,same,next,same,same,same,same,next,next,next,next,next,next,next,next,same,next,next constant_names,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper true_false_null,lower,lower,lower,lower,lower,lower,lower,lower,lower,upper,lower,lower,lower,upper,lower,lower,lower,lower,lower,upper,lower,lower method_names,camel,camel,camel,camel,camel,camel,camel,camel,camel,camel,camel,lower_under,camel,camel,camel,camel,camel,camel,camel,camel,camel,camel method_brace_line,next,next,next,next,next,same,next,same,same,same,same,next,next,same,next,next,next,next,next,same,next,next control_brace_line,same,same,same,same,same,same,next,same,same,same,same,next,same,same,next,same,same,same,same,same,same,next control_space_after,yes,yes,yes,yes,yes,no,yes,yes,yes,yes,no,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes always_use_control_braces,yes,yes,yes,yes,yes,yes,no,yes,yes,yes,no,yes,yes,yes,yes,no,yes,yes,yes,yes,yes,yes else_elseif_line,same,same,same,same,same,same,next,same,same,next,same,next,same,next,next,same,same,same,same,same,same,next case_break_indent_from_switch,0/1,0/1,0/1,1/2,1/2,1/2,1/2,1/1,1/1,1/2,1/2,1/1,1/2,1/2,1/2,1/2,1/2,1/2,0/1,1/1,1/2,1/2 function_space_after,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no closing_php_tag_required,no,no,no,no,no,no,no,no,yes,no,no,no,no,yes,no,no,no,no,no,yes,no,no line_endings,LF,LF,LF,LF,LF,LF,LF,LF,?,LF,?,LF,LF,LF,LF,?,,LF,?,LF,LF,LF static_or_visibility_first,static,?,static,either,either,either,visibility,visibility,visibility,either,static,either,?,visibility,?,?,either,either,visibility,visibility,static,? control_space_parens,no,no,no,no,no,no,yes,no,no,no,no,no,no,yes,?,no,no,no,no,no,no,no blank_line_after_php,no,no,no,no,yes,no,no,no,no,yes,yes,no,no,yes,?,yes,yes,no,yes,no,yes,no class_method_control_brace,next/next/same,next/next/same,next/next/same,next/next/same,next/next/same,same/same/same,next/next/next,same/same/same,same/same/same,same/same/same,same/same/same,next/next/next,next/next/same,next/same/same,next/next/next,next/next/same,next/next/same,next/next/same,next/next/same,same/same/same,next/next/same,next/next/next ~~~ ### A2 調查傳奇 1. indent_type:縮進的類型。tab=“使用標簽”,2或4=“空格數” 2. line_length_limit_soft:“軟”行長度限制,以字符為單位。?= 無法辨別或沒有回應,no 意味著沒有限制。 3. line_length_limit_hard:“硬”行長度限制,以字符為單位。?= 無法辨別或沒有回應,no 意味著沒有限制。 4. class_names:如何命名類。lower= 僅小寫,lower_under= 帶下劃線分隔符的小寫,studly = StudlyCase。 5. class_brace_line:一個類的左括號是 same 作為 class 關鍵字 next 在行上還是在它之后的行上? 6. constant_names:類常量如何命名?upper= 帶有下劃線分隔符的大寫。 7. true_false_null:是 true ,false 和 null 關鍵字拼寫為所有的 lower 情況下,或所有 upper 的情況下? 8. method_names:如何命名方法 ?camel = camelCase,lower_under= 帶下劃線分隔符的小寫。 9. method_brace_line:方法的左括號是 same 作為方法名稱還是 next 在行上? 10. control_brace_line:控制結構的開口支撐是 same 在線上還是 next 在線上? 11. control_space_after:控制結構關鍵字后面是否有空格? 12. always_use_control_braces:控制結構總是使用大括號嗎? 13. else_elseif_line:當使用 else 或時 elseif ,它是否 same 作為前一個右大括號上 next 線,還是上線? 14. case_break_indent_from_switch:有多少時間 case 和 break 從開口縮進 switch 聲明? 15. function_space_after:函數調用在函數名后面和左括號之前是否有空格? 16. closing_php_tag_required:在僅包含 PHP 的文件中,是否 `?>` 需要結束標記? 17. line_endings:使用什么類型的行結尾? 18. static_or_visibility_first:當聲明一個方法時,確實 static 是第一個,或者可見性是第一個? 19. control_space_parens:在控制結構表達式中,左括號后面是空格還是右括號前有空格?yes= if ( $expr ),no= if ($expr)。 20. blank_line_after_php:打開 PHP 標記后是否有空行? 21. class_method_control_brace:關于類,方法和控制結構的開頭括號的內容摘要。 ### A.3 調查結果 1. indent_type: tab: 7 2: 1 4: 14 2. line_length_limit_soft: ?: 2 no: 3 75: 4 80: 6 85: 1 100: 1 120: 4 150: 1 3. line_length_limit_hard: ?: 2 no: 11 85: 4 100: 3 120: 2 4. class_names: ?: 1 lower: 1 lower_under: 1 studly: 19 5. class_brace_line: next: 16 same: 6 6. constant_names: upper: 22 7. true_false_null: lower: 19 upper: 3 8. method_names: camel: 21 lower_under: 1 9. method_brace_line: next: 15 same: 7 10. control_brace_line: next: 4 same: 18 11. control_space_after: no: 2 yes: 20 12. always_use_control_braces: no: 3 yes: 19 13. else_elseif_line: next: 6 same: 16 14. case_break_indent_from_switch: 0/1: 4 1/1: 4 1/2: 14 15. function_space_after: no: 22 16. closing_php_tag_required: no: 19 yes: 3 17. line_endings: ?: 5 LF: 17 18. static_or_visibility_first: ?: 5 either: 7 static: 4 visibility: 6 19. control_space_parens: ?: 1 no: 19 yes: 2 20. blank_line_after_php: ?: 1 no: 13 yes: 8 21. class_method_control_brace: next/next/next: 4 next/next/same: 11 next/same/same: 1 same/same/same: 6
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看