国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Maison développement back-end tutoriel php PHP PSR-2 代碼風(fēng)格規(guī)范

PHP PSR-2 代碼風(fēng)格規(guī)范

Jul 23, 2016 am 08:54 AM

代碼風(fēng)格規(guī)范

本篇規(guī)范是 [PSR-1][] 基本代碼規(guī)范的繼承與擴(kuò)展。

本規(guī)范希望通過(guò)制定一系列規(guī)范化php代碼的規(guī)則,以減少在瀏覽不同作者的代碼時(shí),因代碼風(fēng)格的不同而造成不便。

當(dāng)多名程序員在多個(gè)項(xiàng)目中合作時(shí),就需要一個(gè)共同的編碼規(guī)范,
而本文中的風(fēng)格規(guī)范源自于多個(gè)不同項(xiàng)目代碼風(fēng)格的共同特性,
因此,本規(guī)范的價(jià)值在于我們都遵循這個(gè)編碼風(fēng)格,而不是在于它本身。

關(guān)鍵詞 “必須”("MUST")、“一定不可/一定不能”("MUST NOT")、“需要”("REQUIRED")、
“將會(huì)”("SHALL")、“不會(huì)”("SHALL NOT")、“應(yīng)該”("SHOULD")、“不該”("SHOULD NOT")、
“推薦”("RECOMMENDED")、“可以”("MAY")和”可選“("OPTIONAL")的詳細(xì)描述可參見(jiàn) [RFC 2119][] 。

概覽


代碼必須遵循 [PSR-1][] 中的編碼規(guī)范 。

代碼必須使用4個(gè)空格符而不是 tab鍵 進(jìn)行縮進(jìn)。

每行的字符數(shù)應(yīng)該軟性保持在80個(gè)之內(nèi), 理論上一定不可多于120個(gè), 但一定不能有硬性限制。

每個(gè) namespace 命名空間聲明語(yǔ)句和 use 聲明語(yǔ)句塊后面,必須插入一個(gè)空白行。

類的開(kāi)始花括號(hào)({)必須寫(xiě)在函數(shù)聲明后自成一行,結(jié)束花括號(hào)(})也必須寫(xiě)在函數(shù)主體后自成一行。

方法的開(kāi)始花括號(hào)({)必須寫(xiě)在函數(shù)聲明后自成一行,結(jié)束花括號(hào)(})也必須寫(xiě)在函數(shù)主體后自成一行。

類的屬性和方法必須添加訪問(wèn)修飾符(private、protected 以及 public), abstract 以及 final 必須聲明在訪問(wèn)修飾符之前,而 static 必須聲明在訪問(wèn)修飾符之后。

控制結(jié)構(gòu)的關(guān)鍵字后必須要有一個(gè)空格符,而調(diào)用方法或函數(shù)時(shí)則一定不能有。

控制結(jié)構(gòu)的開(kāi)始花括號(hào)({)必須寫(xiě)在聲明的同一行,而結(jié)束花括號(hào)(})必須寫(xiě)在主體后自成一行。

控制結(jié)構(gòu)的開(kāi)始左括號(hào)后和結(jié)束右括號(hào)前,都一定不能有空格符。

1.1. 例子

以下例子程序簡(jiǎn)單地展示了以上大部分規(guī)范:

  1. namespace Vendor\Package;
  2. use FooInterface;
  3. use BarClass as Bar;
  4. use OtherVendor\OtherPackage\BazClass;
  5. class Foo extends Bar implements FooInterface
  6. {
  7. public function sampleFunction($a, $b = null)
  8. {
  9. if ($a === $b) {
  10. bar();
  11. } elseif ($a > $b) {
  12. $foo->bar($arg1);
  13. } else {
  14. BazClass::bar($arg2, $arg3);
  15. }
  16. }
  17. final public static function bar()
  18. {
  19. // method body
  20. }
  21. }
復(fù)制代碼

通則


2.1 基本編碼準(zhǔn)則

代碼必須符合 [PSR-1][] 中的所有規(guī)范。

2.2 文件

所有PHP文件必須使用Unix LF (linefeed)作為行的結(jié)束符。

所有PHP文件必須以一個(gè)空白行作為結(jié)束。

純PHP代碼文件必須省略最后的 ?> 結(jié)束標(biāo)簽。

2.3. 行

行的長(zhǎng)度一定不能有硬性的約束。

軟性的長(zhǎng)度約束一定要限制在120個(gè)字符以內(nèi),若超過(guò)此長(zhǎng)度,帶代碼規(guī)范檢查的編輯器一定要發(fā)出警告,不過(guò)一定不可發(fā)出錯(cuò)誤提示。

每行不應(yīng)該多于80個(gè)字符,大于80字符的行應(yīng)該折成多行。

非空行后一定不能有多余的空格符。

空行可以使得閱讀代碼更加方便以及有助于代碼的分塊。

每行一定不能存在多于一條語(yǔ)句。

2.4. 縮進(jìn)

代碼必須使用4個(gè)空格符的縮進(jìn),一定不能用 tab鍵 。

備注: 使用空格而不是tab鍵縮進(jìn)的好處在于,
避免在比較代碼差異、打補(bǔ)丁、重閱代碼以及注釋時(shí)產(chǎn)生混淆。
并且,使用空格縮進(jìn),讓對(duì)齊變得更方便。

2.5. 關(guān)鍵字 以及 True/False/Null

PHP所有 [關(guān)鍵字][]必須全部小寫(xiě)。

常量 true 、false 和 null 也必須全部小寫(xiě)。

namespace 以及 use 聲明


namespace 聲明后 必須 插入一個(gè)空白行。

所有 use 必須 在 namespace 后聲明。

每條 use 聲明語(yǔ)句 必須 只有一個(gè) use 關(guān)鍵詞。

use 聲明語(yǔ)句塊后 必須 要有一個(gè)空白行。

例如:

  1. namespace Vendor\Package;
  2. use FooClass;
  3. use BarClass as Bar;
  4. use OtherVendor\OtherPackage\BazClass;
  5. // ... additional PHP code ...
復(fù)制代碼

類、屬性和方法


此處的“類”泛指所有的class類、接口以及traits可復(fù)用代碼塊。

4.1. 擴(kuò)展與繼承

關(guān)鍵詞 extends 和 implements必須寫(xiě)在類名稱的同一行。

類的開(kāi)始花括號(hào)必須獨(dú)占一行,結(jié)束花括號(hào)也必須在類主體后獨(dú)占一行。

  1. namespace Vendor\Package;
  2. use FooClass;
  3. use BarClass as Bar;
  4. use OtherVendor\OtherPackage\BazClass;
  5. class ClassName extends ParentClass implements \ArrayAccess, \Countable
  6. {
  7. // constants, properties, methods
  8. }
復(fù)制代碼

implements 的繼承列表也可以分成多行,這樣的話,每個(gè)繼承接口名稱都必須分開(kāi)獨(dú)立成行,包括第一個(gè)。

  1. namespace Vendor\Package;
  2. use FooClass;
  3. use BarClass as Bar;
  4. use OtherVendor\OtherPackage\BazClass;
  5. class ClassName extends ParentClass implements
  6. \ArrayAccess,
  7. \Countable,
  8. \Serializable
  9. {
  10. // constants, properties, methods
  11. }
復(fù)制代碼
4.2. 屬性

每個(gè)屬性都必須添加訪問(wèn)修飾符。

一定不可使用關(guān)鍵字 var 聲明一個(gè)屬性。

每條語(yǔ)句一定不可定義超過(guò)一個(gè)屬性。

不要使用下劃線作為前綴,來(lái)區(qū)分屬性是 protected 或 private。

以下是屬性聲明的一個(gè)范例:

  1. namespace Vendor\Package;
  2. class ClassName
  3. {
  4. public $foo = null;
  5. }
復(fù)制代碼
4.3. 方法

所有方法都必須添加訪問(wèn)修飾符。

不要使用下劃線作為前綴,來(lái)區(qū)分方法是 protected 或 private。

方法名稱后一定不能有空格符,其開(kāi)始花括號(hào)必須獨(dú)占一行,結(jié)束花括號(hào)也必須在方法主體后單獨(dú)成一行。參數(shù)左括號(hào)后和右括號(hào)前一定不能有空格。

一個(gè)標(biāo)準(zhǔn)的方法聲明可參照以下范例,留意其括號(hào)、逗號(hào)、空格以及花括號(hào)的位置。

  1. namespace Vendor\Package;
  2. class ClassName
  3. {
  4. public function fooBarBaz($arg1, &$arg2, $arg3 = [])
  5. {
  6. // method body
  7. }
  8. }
復(fù)制代碼
4.4. 方法的參數(shù)

參數(shù)列表中,每個(gè)逗號(hào)后面必須要有一個(gè)空格,而逗號(hào)前面一定不能有空格。

有默認(rèn)值的參數(shù),必須放到參數(shù)列表的末尾。

  1. namespace Vendor\Package;
  2. class ClassName
  3. {
  4. public function foo($arg1, &$arg2, $arg3 = [])
  5. {
  6. // method body
  7. }
  8. }
復(fù)制代碼

參數(shù)列表可以分列成多行,這樣,包括第一個(gè)參數(shù)在內(nèi)的每個(gè)參數(shù)都必須單獨(dú)成行。

拆分成多行的參數(shù)列表后,結(jié)束括號(hào)以及方法開(kāi)始花括號(hào) 必須 寫(xiě)在同一行,中間用一個(gè)空格分隔。

  1. namespace Vendor\Package;
  2. class ClassName
  3. {
  4. public function aVeryLongMethodName(
  5. ClassTypeHint $arg1,
  6. &$arg2,
  7. array $arg3 = []
  8. ) {
  9. // method body
  10. }
  11. }
復(fù)制代碼
4.5. abstract 、 final 、 以及 static

需要添加 abstract 或 final 聲明時(shí), 必須寫(xiě)在訪問(wèn)修飾符前,而 static 則必須寫(xiě)在其后。

  1. namespace Vendor\Package;
  2. abstract class ClassName
  3. {
  4. protected static $foo;
  5. abstract protected function zim();
  6. final public static function bar()
  7. {
  8. // method body
  9. }
  10. }
復(fù)制代碼
4.6. 方法及函數(shù)調(diào)用

方法及函數(shù)調(diào)用時(shí),方法名或函數(shù)名與參數(shù)左括號(hào)之間一定不能有空格,參數(shù)右括號(hào)前也 一定不能有空格。每個(gè)參數(shù)前一定不能有空格,但其后必須有一個(gè)空格。

  1. bar();
  2. $foo->bar($arg1);
  3. Foo::bar($arg2, $arg3);
復(fù)制代碼

參數(shù)可以分列成多行,此時(shí)包括第一個(gè)參數(shù)在內(nèi)的每個(gè)參數(shù)都必須單獨(dú)成行。

  1. $foo->bar(
  2. $longArgument,
  3. $longerArgument,
  4. $muchLongerArgument
  5. );
復(fù)制代碼

控制結(jié)構(gòu)


控制結(jié)構(gòu)的基本規(guī)范如下:

控制結(jié)構(gòu)關(guān)鍵詞后必須有一個(gè)空格。

左括號(hào) ( 后一定不能有空格。

右括號(hào) ) 前也一定不能有空格。

右括號(hào) ) 與開(kāi)始花括號(hào) { 間一定有一個(gè)空格。

結(jié)構(gòu)體主體一定要有一次縮進(jìn)。

結(jié)束花括號(hào) } 一定在結(jié)構(gòu)體主體后單獨(dú)成行。

每個(gè)結(jié)構(gòu)體的主體都必須被包含在成對(duì)的花括號(hào)之中,
這能讓結(jié)構(gòu)體更加結(jié)構(gòu)話,以及減少加入新行時(shí),出錯(cuò)的可能性。

5.1. if 、 elseif 和 else

標(biāo)準(zhǔn)的 if 結(jié)構(gòu)如下代碼所示,留意 括號(hào)、空格以及花括號(hào)的位置,
注意 else 和 elseif 都與前面的結(jié)束花括號(hào)在同一行。

  1. if ($expr1) {
  2. // if body
  3. } elseif ($expr2) {
  4. // elseif body
  5. } else {
  6. // else body;
  7. }
復(fù)制代碼

應(yīng)該使用關(guān)鍵詞 elseif 代替所有 else if ,以使得所有的控制關(guān)鍵字都像是單獨(dú)的一個(gè)詞。

5.2. switch 和 case

標(biāo)準(zhǔn)的 switch 結(jié)構(gòu)如下代碼所示,留意括號(hào)、空格以及花括號(hào)的位置。
case 語(yǔ)句必須相對(duì) switch 進(jìn)行一次縮進(jìn),而 break 語(yǔ)句以及 case 內(nèi)的其它語(yǔ)句都 必須 相對(duì) case 進(jìn)行一次縮進(jìn)。
如果存在非空的 case 直穿語(yǔ)句,主體里必須有類似 // no break 的注釋。

  1. switch ($expr) {
  2. case 0:
  3. echo 'First case, with a break';
  4. break;
  5. case 1:
  6. echo 'Second case, which falls through';
  7. // no break
  8. case 2:
  9. case 3:
  10. case 4:
  11. echo 'Third case, return instead of break';
  12. return;
  13. default:
  14. echo 'Default case';
  15. break;
  16. }
復(fù)制代碼
5.3. while 和 do while

一個(gè)規(guī)范的 while 語(yǔ)句應(yīng)該如下所示,注意其 括號(hào)、空格以及花括號(hào)的位置。

  1. while ($expr) {
  2. // structure body
  3. }
復(fù)制代碼

標(biāo)準(zhǔn)的 do while 語(yǔ)句如下所示,同樣的,注意其 括號(hào)、空格以及花括號(hào)的位置。

  1. do {
  2. // structure body;
  3. } while ($expr);
復(fù)制代碼
5.4. for

標(biāo)準(zhǔn)的 for 語(yǔ)句如下所示,注意其 括號(hào)、空格以及花括號(hào)的位置。

  1. for ($i = 0; $i // for body
  2. }
復(fù)制代碼
5.5. foreach

標(biāo)準(zhǔn)的 foreach 語(yǔ)句如下所示,注意其 括號(hào)、空格以及花括號(hào)的位置。

  1. foreach ($iterable as $key => $value) {
  2. // foreach body
  3. }
復(fù)制代碼
5.6. try, catch

標(biāo)準(zhǔn)的 try catch 語(yǔ)句如下所示,注意其 括號(hào)、空格以及花括號(hào)的位置。

  1. try {
  2. // try body
  3. } catch (FirstExceptionType $e) {
  4. // catch body
  5. } catch (OtherExceptionType $e) {
  6. // catch body
  7. }
復(fù)制代碼

閉包


閉包聲明時(shí),關(guān)鍵詞 function 后以及關(guān)鍵詞 use 的前后都必須要有一個(gè)空格。

開(kāi)始花括號(hào)必須寫(xiě)在聲明的同一行,結(jié)束花括號(hào)必須緊跟主體結(jié)束的下一行。

參數(shù)列表和變量列表的左括號(hào)后以及右括號(hào)前,必須不能有空格。

參數(shù)和變量列表中,逗號(hào)前必須不能有空格,而逗號(hào)后必須要有空格。

閉包中有默認(rèn)值的參數(shù)必須放到列表的后面。

標(biāo)準(zhǔn)的閉包聲明語(yǔ)句如下所示,注意其 括號(hào)、逗號(hào)、空格以及花括號(hào)的位置。

  1. $closureWithArgs = function ($arg1, $arg2) {
  2. // body
  3. };
  4. $closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {
  5. // body
  6. };
復(fù)制代碼

參數(shù)列表以及變量列表可以分成多行,這樣,包括第一個(gè)在內(nèi)的每個(gè)參數(shù)或變量都必須單獨(dú)成行,而列表的右括號(hào)與閉包的開(kāi)始花括號(hào)必須放在同一行。

以下幾個(gè)例子,包含了參數(shù)和變量列表被分成多行的多情況。

  1. $longArgs_noVars = function (
  2. $longArgument,
  3. $longerArgument,
  4. $muchLongerArgument
  5. ) {
  6. // body
  7. };
  8. $noArgs_longVars = function () use (
  9. $longVar1,
  10. $longerVar2,
  11. $muchLongerVar3
  12. ) {
  13. // body
  14. };
  15. $longArgs_longVars = function (
  16. $longArgument,
  17. $longerArgument,
  18. $muchLongerArgument
  19. ) use (
  20. $longVar1,
  21. $longerVar2,
  22. $muchLongerVar3
  23. ) {
  24. // body
  25. };
  26. $longArgs_shortVars = function (
  27. $longArgument,
  28. $longerArgument,
  29. $muchLongerArgument
  30. ) use ($var1) {
  31. // body
  32. };
  33. $shortArgs_longVars = function ($arg) use (
  34. $longVar1,
  35. $longerVar2,
  36. $muchLongerVar3
  37. ) {
  38. // body
  39. };
復(fù)制代碼

注意,閉包被直接用作函數(shù)或方法調(diào)用的參數(shù)時(shí),以上規(guī)則仍然適用。

  1. $foo->bar(
  2. $arg1,
  3. function ($arg2) use ($var1) {
  4. // body
  5. },
  6. $arg3
  7. );
復(fù)制代碼

總結(jié)


以上規(guī)范難免有疏忽,其中包括但不僅限于:

全局變量和常量的定義

函數(shù)的定義

操作符和賦值

行內(nèi)對(duì)齊

注釋和文檔描述塊

類名的前綴及后綴

最佳實(shí)踐

本規(guī)范之后的修訂與擴(kuò)展將彌補(bǔ)以上不足。

附錄 A. 問(wèn)卷調(diào)查

為了編寫(xiě)本規(guī)范,小組制定了調(diào)查問(wèn)卷,用來(lái)統(tǒng)計(jì)各成員項(xiàng)目的共同規(guī)范。
以下是此問(wèn)卷調(diào)查的數(shù)據(jù),在此供查閱。

A.1. 問(wèn)卷數(shù)據(jù)
  1. 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,http://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
  2. voting,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,no,no,no,?,yes,no,yes
  3. indent_type,4,4,4,4,4,tab,4,tab,tab,2,4,tab,4,4,4,4,4,4,tab,tab,4,tab
  4. line_length_limit_soft,75,75,75,75,no,85,120,120,80,80,80,no,100,80,80,?,?,120,80,120,no,150
  5. line_length_limit_hard,85,85,85,85,no,no,no,no,100,?,no,no,no,100,100,?,120,120,no,no,no,no
  6. class_names,studly,studly,studly,studly,studly,studly,studly,studly,studly,studly,studly,lower_under,studly,lower,studly,studly,studly,studly,?,studly,studly,studly
  7. 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
  8. constant_names,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. line_endings,LF,LF,LF,LF,LF,LF,LF,LF,?,LF,?,LF,LF,LF,LF,?,,LF,?,LF,LF,LF
  20. static_or_visibility_first,static,?,static,either,either,either,visibility,visibility,visibility,either,static,either,?,visibility,?,?,either,either,visibility,visibility,static,?
  21. control_space_parens,no,no,no,no,no,no,yes,no,no,no,no,no,no,yes,?,no,no,no,no,no,no,no
  22. 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
  23. 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
復(fù)制代碼
A.2. 問(wèn)卷說(shuō)明

indent_type:
縮進(jìn)類型. tab = "使用 tab 鍵一次", 2 or 4 = "空格的數(shù)量"

line_length_limit_soft:
每行字符數(shù)量的“軟”限制. ? = 不可辯或無(wú)作答, no 表示無(wú)限制.

line_length_limit_hard:
每行字符數(shù)量的“硬”限制. ? = 不可辯或無(wú)作答, no 表示無(wú)限制.

class_names:
類名稱的命名. lower = 只允許小寫(xiě)字母, lower_under = 下滑線分隔的小寫(xiě)字母, studly = StudlyCase 的駝峰風(fēng)格.

class_brace_line:
類的開(kāi)始花括號(hào)是與 class 關(guān)鍵字在同一行或是在其的下一行?

constant_names:
類的常量如何命名? upper = 下劃線分隔的大寫(xiě)字母.

true_false_null:
關(guān)鍵字 true、false 以及 null 是全部小寫(xiě) lower 還是全部大寫(xiě) upper?

method_names:
方法名稱如何命名? camel = camelCase, lower_under = 下劃線分隔的小寫(xiě)字母.

method_brace_line:
方法的開(kāi)始花括號(hào)是與方法名在同一行還是在其的下一行?

control_brace_line:
控制結(jié)構(gòu)的開(kāi)始花括號(hào)是與聲明在同一行還是在其的下一行?

control_space_after:
控制結(jié)構(gòu)關(guān)鍵詞后是否有空格?

always_use_control_braces:
控制結(jié)構(gòu)體是否都要被包含在花括號(hào)內(nèi)?

else_elseif_line:
else 或 elseif 與前面的結(jié)束花括號(hào)在同一行還是在其的下一行?

case_break_indent_from_switch:
switch 語(yǔ)句中的 case 和 break 需要相對(duì) switch 縮進(jìn)多少次?

function_space_after:
函數(shù)調(diào)用語(yǔ)句中,函數(shù)名稱與變量列表的左括號(hào)間是否有空格?

closing_php_tag_required:
純 PHP 代碼的文件,是否需要 ?> 結(jié)束標(biāo)簽?

line_endings:
選擇哪種類型的行結(jié)束符?

static_or_visibility_first:
聲明一個(gè)靜態(tài)方法時(shí),static 是寫(xiě)訪問(wèn)修飾符前還是后?

control_space_parens:
控制結(jié)構(gòu)里,左括號(hào)后以及右括號(hào)前是否有空格?yes = if ( $expr ), no = if ($expr).

blank_line_after_php:
PHP 開(kāi)始標(biāo)簽后,是否需要一個(gè)空行?

class_method_control_brace:
開(kāi)始花括號(hào)在類、方法和控制結(jié)構(gòu)的位置統(tǒng)計(jì)。

A.3. 問(wèn)卷統(tǒng)計(jì)結(jié)果
  1. indent_type:
  2. tab: 7
  3. 2: 1
  4. 4: 14
  5. line_length_limit_soft:
  6. ?: 2
  7. no: 3
  8. 75: 4
  9. 80: 6
  10. 85: 1
  11. 100: 1
  12. 120: 4
  13. 150: 1
  14. line_length_limit_hard:
  15. ?: 2
  16. no: 11
  17. 85: 4
  18. 100: 3
  19. 120: 2
  20. class_names:
  21. ?: 1
  22. lower: 1
  23. lower_under: 1
  24. studly: 19
  25. class_brace_line:
  26. next: 16
  27. same: 6
  28. constant_names:
  29. upper: 22
  30. true_false_null:
  31. lower: 19
  32. upper: 3
  33. method_names:
  34. camel: 21
  35. lower_under: 1
  36. method_brace_line:
  37. next: 15
  38. same: 7
  39. control_brace_line:
  40. next: 4
  41. same: 18
  42. control_space_after:
  43. no: 2
  44. yes: 20
  45. always_use_control_braces:
  46. no: 3
  47. yes: 19
  48. else_elseif_line:
  49. next: 6
  50. same: 16
  51. case_break_indent_from_switch:
  52. 0/1: 4
  53. 1/1: 4
  54. 1/2: 14
  55. function_space_after:
  56. no: 22
  57. closing_php_tag_required:
  58. no: 19
  59. yes: 3
  60. line_endings:
  61. ?: 5
  62. LF: 17
  63. static_or_visibility_first:
  64. ?: 5
  65. either: 7
  66. static: 4
  67. visibility: 6
  68. control_space_parens:
  69. ?: 1
  70. no: 19
  71. yes: 2
  72. blank_line_after_php:
  73. ?: 1
  74. no: 13
  75. yes: 8
  76. class_method_control_brace:
  77. next/next/next: 4
  78. next/next/same: 11
  79. next/same/same: 1
  80. same/same/same: 6
復(fù)制代碼

轉(zhuǎn)自Github(PizzaLiu)

PHP, PSR


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment mettre en ?uvre l'authentification et l'autorisation dans PHP? Comment mettre en ?uvre l'authentification et l'autorisation dans PHP? Jun 20, 2025 am 01:03 AM

ToseCurelyHandleAuthentication andAuthorizationInPhp, suivitheSesteps: 1.AlwayShashPasswordSwithPassword_Hash () etverifyusingPassword_verify (), usePreparedStatementStopReventsQLendiject, andstoreSerDatain $ _SessionAfterLogin.2

Comment pouvez-vous gérer les téléchargements de fichiers en toute sécurité dans PHP? Comment pouvez-vous gérer les téléchargements de fichiers en toute sécurité dans PHP? Jun 19, 2025 am 01:05 AM

Pour gérer en toute sécurité les téléchargements de fichiers dans PHP, le noyau consiste à vérifier les types de fichiers, à renommer les fichiers et à restreindre les autorisations. 1. Utilisez finfo_file () pour vérifier le type de mime réel, et seuls des types spécifiques tels que l'image / jpeg sont autorisés; 2. Utilisez Uniqid () pour générer des noms de fichiers aléatoires et les stocker dans le répertoire racine non Web; 3. Limiter la taille du fichier via les formulaires PHP.ini et HTML et définir les autorisations de répertoire sur 0755; 4. Utilisez Clamav pour scanner les logiciels malveillants pour améliorer la sécurité. Ces étapes empêchent efficacement les vulnérabilités de sécurité et garantissent que le processus de téléchargement de fichiers est s?r et fiable.

Quelles sont les différences entre == (comparaison lache) et === (comparaison stricte) en PHP? Quelles sont les différences entre == (comparaison lache) et === (comparaison stricte) en PHP? Jun 19, 2025 am 01:07 AM

En PHP, la principale différence entre == et == est la rigueur de la vérification des types. == La conversion de type sera effectuée avant la comparaison, par exemple, 5 == "5" Renvoie True, et === Demande que la valeur et le type soient les mêmes avant que True sera renvoyé, par exemple, 5 === "5" Renvoie False. Dans les scénarios d'utilisation, === est plus sécurisé et doit être utilisé en premier, et == n'est utilisé que lorsque la conversion de type est requise.

Comment effectuer des opérations arithmétiques en php (, -, *, /,%)? Comment effectuer des opérations arithmétiques en php (, -, *, /,%)? Jun 19, 2025 pm 05:13 PM

Les méthodes d'utilisation des opérations mathématiques de base en PHP sont les suivantes: 1. Les signes d'addition prennent en charge les entiers et les nombres à virgule flottante, et peuvent également être utilisés pour les variables. Les numéros de cha?ne seront automatiquement convertis mais non recommandés en dépendances; 2. Les signes de soustraction utilisent - les signes, les variables sont les mêmes et la conversion de type est également applicable; 3. Les panneaux de multiplication utilisent * les panneaux, qui conviennent aux nombres et aux cha?nes similaires; 4. La division utilise / signes, qui doit éviter de diviser par zéro, et noter que le résultat peut être des nombres à virgule flottante; 5. Prendre les signes du module peut être utilisé pour juger des nombres impairs et uniformes, et lors du traitement des nombres négatifs, les signes restants sont cohérents avec le dividende. La clé pour utiliser correctement ces opérateurs est de s'assurer que les types de données sont clairs et que la situation limite est bien gérée.

Comment pouvez-vous interagir avec les bases de données NoSQL (par exemple, MongoDB, redis) de PHP? Comment pouvez-vous interagir avec les bases de données NoSQL (par exemple, MongoDB, redis) de PHP? Jun 19, 2025 am 01:07 AM

Oui, PHP peut interagir avec les bases de données NoSQL comme MongoDB et Redis à travers des extensions ou des bibliothèques spécifiques. Tout d'abord, utilisez le pilote MongoDBPHP (installé via PECL ou Composer) pour créer des instances clients et faire fonctionner des bases de données et des collections, en prenant en charge l'insertion, la requête, l'agrégation et d'autres opérations; Deuxièmement, utilisez la bibliothèque Predis ou l'extension PHPREDIS pour vous connecter à Redis, effectuer des paramètres et des acquisitions de valeur clé, et recommander PHPredis pour des scénarios à haute performance, tandis que Predis est pratique pour un déploiement rapide; Les deux conviennent aux environnements de production et sont bien documentés.

Comment rester à jour avec les derniers développements PHP et meilleures pratiques? Comment rester à jour avec les derniers développements PHP et meilleures pratiques? Jun 23, 2025 am 12:56 AM

TostayCurrentwithPhpDevelopments andBestPractices, suiventyewnewsources likephp.netandphpweekly, engagewithcommunitiesonforumums et conférences, keeptoolingupdated etgradualadoptnewfeatures, etreadorontruttetoopensourceprojects.

Qu'est-ce que PHP et pourquoi est-il utilisé pour le développement Web? Qu'est-ce que PHP et pourquoi est-il utilisé pour le développement Web? Jun 23, 2025 am 12:55 AM

PhpBecamepopularforwebDevelopmentDuetoitSeaseOflearning, Samoussentegration withhtml, widespreadhostingsupport, andalargecosystemysteclustingframeworkslikeLaravelandcmsplateformeslikewordpress.itexcelSinlingFormSubMissions, ManagetingSeSeSessions, interactif, interactif

Comment définir le fuseau horaire PHP? Comment définir le fuseau horaire PHP? Jun 25, 2025 am 01:00 AM

Tosetherighttimezoneinphp, usedate_default_timezone_set () Fonctionnellestartofyourscriptwithavalididentifiersuchas'america / new_york'.1.usedate_default_timezone_set () beforeanydate / timefunctions.20

See all articles