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

Heim Backend-Entwicklung PHP-Tutorial 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è)空白行。

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

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

類(lèi)的屬性和方法必須添加訪(fǎng)問(wèn)修飾符(private、protected 以及 public), abstract 以及 final 必須聲明在訪(fǎng)問(wèn)修飾符之前,而 static 必須聲明在訪(fǎng)問(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è)字符以?xún)?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ù)制代碼

類(lèi)、屬性和方法


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

4.1. 擴(kuò)展與繼承

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

類(lèi)的開(kāi)始花括號(hào)必須獨(dú)占一行,結(jié)束花括號(hào)也必須在類(lèi)主體后獨(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 的繼承列表也可以分成多行,這樣的話(huà),每個(gè)繼承接口名稱(chēng)都必須分開(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è)屬性都必須添加訪(fǎng)問(wèn)修飾符。

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

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

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

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

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

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

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

方法名稱(chēng)后一定不能有空格符,其開(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ě)在訪(fǎng)問(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)話(huà),以及減少加入新行時(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ǔ)句,主體里必須有類(lèi)似 // 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ì)齊

注釋和文檔描述塊

類(lèi)名的前綴及后綴

最佳實(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)類(lèi)型. tab = "使用 tab 鍵一次", 2 or 4 = "空格的數(shù)量"

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

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

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

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

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

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

method_names:
方法名稱(chēng)如何命名? camel = camelCase, lower_under = 下劃線(xiàn)分隔的小寫(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ù)名稱(chēng)與變量列表的左括號(hào)間是否有空格?

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

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

static_or_visibility_first:
聲明一個(gè)靜態(tài)方法時(shí),static 是寫(xiě)訪(fǎng)問(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)在類(lèi)、方法和控制結(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


Erkl?rung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie implementiere ich Authentifizierung und Autorisierung in PHP? Wie implementiere ich Authentifizierung und Autorisierung in PHP? Jun 20, 2025 am 01:03 AM

TosecurelyHandleAuthenticationAuthorizationInphp, folge theSteps: 1.Alwayshashpasswordswithpassword_hash () und password_verify (), usePreeParedStatementStopreventsQlinjapitca und StoreuserDatain $ _SessionArtelogin.2.ImplementscaChescescesc

Wie k?nnen Sie Dateien -Uploads in PHP sicher verarbeiten? Wie k?nnen Sie Dateien -Uploads in PHP sicher verarbeiten? Jun 19, 2025 am 01:05 AM

Um Datei -Uploads in PHP sicher zu verarbeiten, besteht der Kern darin, Dateitypen zu überprüfen, Dateien umzubenennen und die Berechtigungen zu beschr?nken. 1. Verwenden Sie Finfo_File (), um den realen MIME -Typ zu überprüfen, und nur bestimmte Typen wie Bild/JPEG sind zul?ssig. 2. Verwenden Sie Uniqid (), um zuf?llige Dateinamen zu generieren und sie im Root-Verzeichnis ohne Web zu speichern. 3.. Begrenzen Sie die Dateigr??e durch Php.ini- und HTML -Formulare und setzen Sie die Verzeichnisberechtigungen auf 0755; 4. Verwenden Sie Clamav, um Malware zu scannen, um die Sicherheit zu verbessern. Diese Schritte verhindern effektiv Sicherheitslücken und stellen sicher, dass der Upload -Prozess des Datei -Uploads sicher und zuverl?ssig ist.

Was sind die Unterschiede zwischen == (loser Vergleich) und === (strenger Vergleich) in PHP? Was sind die Unterschiede zwischen == (loser Vergleich) und === (strenger Vergleich) in PHP? Jun 19, 2025 am 01:07 AM

In PHP ist der Hauptunterschied zwischen == und == die Strenge der Typprüfung. == Die Konvertierung des Typs wird vor dem Vergleich durchgeführt, beispielsweise 5 == "5" gibt true zurück und === fordert an, dass der Wert und der Typ gleich sind, bevor True zurückgegeben wird, z. B. 5 === "5" gibt false zurück. In den Nutzungsszenarien ist === sicherer und sollte zuerst verwendet werden, und == wird nur verwendet, wenn die Typumwandlung erforderlich ist.

Wie führe ich arithmetische Operationen in PHP (, -, *, /, %) aus? Wie führe ich arithmetische Operationen in PHP (, -, *, /, %) aus? Jun 19, 2025 pm 05:13 PM

Die Methoden zur Verwendung grundlegender mathematischer Operationen in PHP sind wie folgt: 1. Additionszeichen unterstützen Ganzfaktoren und Floating-Punkt-Zahlen und k?nnen auch für Variablen verwendet werden. String -Nummern werden automatisch konvertiert, aber nicht für Abh?ngigkeiten empfohlen. 2. Subtraktionszeichen verwenden - Zeichen, Variablen sind gleich, und die Typumwandlung ist ebenfalls anwendbar. 3. Multiplikationszeichen verwenden * Zeichen, die für Zahlen und ?hnliche Zeichenfolgen geeignet sind; 4. Division verwendet / Zeichen, die vermeiden müssen, durch Null zu dividieren, und beachten Sie, dass das Ergebnis m?glicherweise schwimmende Punktzahlen sein kann. 5. Die Modulzeichen k?nnen verwendet werden, um ungerade und sogar Zahlen zu beurteilen, und wenn negative Zahlen verarbeitet werden, stimmen die Restzeichen mit der Dividende überein. Der Schlüssel zur korrekten Verwendung dieser Operatoren liegt darin, sicherzustellen, dass die Datentypen klar sind und die Grenzsituation gut behandelt wird.

Wie k?nnen Sie mit NoSQL -Datenbanken (z. B. MongoDB, Redis) von PHP interagieren? Wie k?nnen Sie mit NoSQL -Datenbanken (z. B. MongoDB, Redis) von PHP interagieren? Jun 19, 2025 am 01:07 AM

Ja, PHP kann mit NoSQL -Datenbanken wie MongoDB und Redis durch bestimmte Erweiterungen oder Bibliotheken interagieren. Verwenden Sie zun?chst den MongoDBPHP -Treiber (installiert über PECL oder Composer), um Client -Instanzen zu erstellen und Datenbanken und Sammlungen zu betreiben, wobei Sie Insertion, Abfrage, Aggregation und andere Vorg?nge unterstützen. Zweitens verwenden Sie die Predis Library oder PHPREDIS-Erweiterung, um eine Verbindung zu Redis herzustellen, Schlüsselwerteinstellungen und -akquisitionen durchzuführen und PHPREDIS für Hochleistungsszenarien zu empfehlen, w?hrend Predis für die schnelle Bereitstellung bequem ist. Beide sind für Produktionsumgebungen geeignet und gut dokumentiert.

Wie bleibe ich mit den neuesten PHP-Entwicklungen und Best Practices auf dem neuesten Stand? Wie bleibe ich mit den neuesten PHP-Entwicklungen und Best Practices auf dem neuesten Stand? Jun 23, 2025 am 12:56 AM

TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

Was ist PHP und warum wird es für die Webentwicklung verwendet? Was ist PHP und warum wird es für die Webentwicklung verwendet? Jun 23, 2025 am 12:55 AM

PHPBECAMEPOPULARFORWebDevelopmentDuetoitSeaseoflearning, Seamlessintegrationwithhtml, weit verbreitete Hostingsupport, andalargeecosystemincludingFrameWorkelaravelandcmsplatformen -?hnliche WordPress.itexcelsinformlingsformen, Managingusesersions, Interacti

Wie setzen Sie die PHP -Zeitzone? Wie setzen Sie die PHP -Zeitzone? Jun 25, 2025 am 01:00 AM

Tosettherighttimezoneinphp, usedate_default_timezone_set () functionAtthestartofyourScriptWithAvalididentifiersuchas'america/new_york'.1.usedate_default_timezone_set () beeanydate/timeFununtions.2.Alternativ, konfigurieren

See all articles