Leitfaden zum PHP-Codierungsstil (PHP-FIG PSR-2)
Dieser Leitfaden ist eine Erweiterung des PSR-1 Basic Coding Standard.
Dieser Leitfaden listet gängige PHP-Codeformatregeln und Vorschläge auf, die darauf abzielen, kognitive Barrieren abzubauen, die durch unterschiedliche Codierungsstile verschiedener Autoren verursacht werden.
Die Stilkonventionen hier stammen aus mehreren Mitgliedsprojekten. Leitlinienautoren arbeiteten an mehreren Projekten zusammen, um diese Leitlinienbestimmungen voranzutreiben. Der Schlüssel zur Führung liegt im Teilen, nicht in den Regeln selbst.
Die im Artikel enthaltenen Schlüsselwörter sind „MUSS“, „DÜRFEN NICHT“, „ERFORDERLICH“, „SOLL“, „SOLL NICHT“, „SOLLTE“, „SOLLTE NICHT“, „EMPFOHLEN“, „MAY“ und „OPTIONAL“ sind in RFC 2119 beschrieben.
Übersicht
- Der Code muss dem „Basic Coding“ Standard PSR [PSR-1] entsprechen.
- Beim Einrücken des Codes müssen 4 Leerzeichen anstelle von Tabulatoren verwendet werden.
- Es darf keine feste Begrenzung der Zeilenlänge geben; die weiche Begrenzung muss 120 Zeichen betragen; sie sollte kleiner oder gleich 80 Zeichen sein.
- Nach der Namespace-Deklaration muss eine Leerzeile stehen, und nach der Verwendungsdeklaration muss auch eine Leerzeile stehen.
- Das { der Klasse muss in der nächsten Zeile des Klassennamens stehen und } muss in der nächsten Zeile des Hauptteils stehen.
- Das { der Methode muss sich in der nächsten Zeile der Methodensignatur befinden und } muss in der nächsten Zeile des Hauptteils stehen.
- Für alle Eigenschaften und Methoden muss die Sichtbarkeit festgelegt sein; „Abstract“ und „Final“ müssen vor der Sichtbarkeit deklariert werden.
- Nach dem Strukturkontrollschlüsselwort muss ein Leerzeichen stehen; Methoden und Funktionen dürfen kein Leerzeichen enthalten.
- Das { der Strukturkontrolle muss sich in derselben Zeile befinden und } muss in der nächsten Zeile des Hauptteils stehen.
- Nach dem strukturkontrollierten muss ein Leerzeichen stehen (und vor dem strukturkontrollierten darf kein Leerzeichen stehen).
Beispiel
Das Folgende ist ein umfassendes Beispiel, das Ihnen helfen soll, ein allgemeines Verständnis der Regeln zu erlangen.
<code><span><?php</span><span>namespace</span><span>Vendor</span>\<span>Package</span>; <span>use</span><span>FooInterface</span>; <span>use</span><span>BarClass</span><span>as</span><span>Bar</span>; <span>use</span><span>OtherVendor</span>\<span>OtherPackage</span>\<span>BazClass</span>; <span><span>class</span><span>Foo</span><span>extends</span><span>Bar</span><span>implements</span><span>FooInterface</span> {</span><span>public</span><span><span>function</span><span>sampleFunction</span><span>(<span>$a</span>, <span>$b</span> = null)</span> {</span><span>if</span> (<span>$a</span> === <span>$b</span>) { bar(); } <span>elseif</span> (<span>$a</span> > <span>$b</span>) { <span>$foo</span>->bar(<span>$arg1</span>); } <span>else</span> { BazClass::bar(<span>$arg2</span>, <span>$arg3</span>); } } <span>final</span><span>public</span><span>static</span><span><span>function</span><span>bar</span><span>()</span> {</span><span>// 方法 body</span> } }</span></code>
Grundregeln
Grundlegende Codierungsstandards
Der Code muss den Bedingungen von PSR-1 entsprechen.
Dateien
- Alle Dateien müssen Unix LF (Linefeed)-Zeilenumbrüche verwenden.
- Alle PHP-Dateien müssen mit einer einzelnen Leerzeile enden.
- Code, der nur PHP enthält, muss das schließende PHP-Tag ignorieren? >.
Linien
- Es darf keine feste Begrenzung der Zeilenlänge geben.
- Die weiche Längenbeschränkung muss 120 Zeichen betragen; die automatische Codestilprüfung muss 120 Zeichen als Warnung festlegen und darf nicht als Fehler festgelegt werden.
- Zeilen sollten 80 Zeichen nicht überschreiten; Zeilen, die länger sind, sollten in mehrere Zeilen mit nicht mehr als 80 Zeichen aufgeteilt werden.
- Nicht leere Zeilen müssen ohne nachgestellte Leerzeichen enden.
- Um die Lesbarkeit zu verbessern, fügen Sie Leerzeilen hinzu, um die Relevanz des Codes zu kennzeichnen.
- Jede Zeile darf nicht mehr als eine Aussage enthalten.
Einrückung
- Der Code muss eine Einrückung mit 4 Leerzeichen enthalten und Tabulatoren dürfen nicht als Einrückung verwendet werden.
Hinweis: Verwenden Sie nur Leerzeichen und keine Tabulatoren, um Probleme mit Unterschieden, Patches, Verlauf und Anmerkungen zu vermeiden. Auch die Verwendung von Leerzeichen hilft bei der Ausrichtung.
Schlüsselwörter (reservierte Wörter) und wahr/falsch/null
- PHP-reservierte Wörter müssen Kleinbuchstaben sein.
- PHP-Konstanten wahr, falsch und null müssen Kleinbuchstaben sein.
Namespace- und Nutzungsdeklarationen
- Nach der Namespace-Deklaration muss eine Leerzeile stehen.
- Alle Nutzungsanweisungen müssen der Namespace-Anweisung folgen.
- Jede Deklaration muss einen separaten Verwendungszweck haben.
- Nach dem Verwendungsdeklarationsbereich muss eine Leerzeile stehen.
Zum Beispiel:
<code><span><?php</span><span>namespace</span><span>Vendor</span>\<span>Package</span>; <span>use</span><span>FooClass</span>; <span>use</span><span>BarClass</span><span>as</span><span>Bar</span>; <span>use</span><span>OtherVendor</span>\<span>OtherPackage</span>\<span>BazClass</span>; <span>// ... additional PHP code ...</span></code>
Klasse, Attribut und Methode
Die „Klasse“ umfasst hier Klasse, Schnittstelle und Merkmal.
Vererbung und Implementierung
Die Schlüsselwörter „extends“ und „implements“ müssen in derselben Zeile wie der Klassenname deklariert werden. { von
Klasse muss in einer eigenen Zeile stehen; } muss in der nächsten Zeile des Hauptteils stehen.
<code><span><?php</span><span>namespace</span><span>Vendor</span>\<span>Package</span>; <span>use</span><span>FooClass</span>; <span>use</span><span>BarClass</span><span>as</span><span>Bar</span>; <span>use</span><span>OtherVendor</span>\<span>OtherPackage</span>\<span>BazClass</span>; <span><span>class</span><span>ClassName</span><span>extends</span><span>ParentClass</span><span>implements</span> \<span>ArrayAccess</span>, \<span>Countable</span> {</span><span>// constants, properties, methods</span> }</code>
Implementierung Wenn mehrere Schnittstellen vorhanden sind, kann die Schnittstellenliste in mehrere Zeilen unterteilt werden, und jede Unterzeile verfügt über einen Einzug. Wenn Sie dies tun, muss sich die erste Schnittstelle in der Zeile nach den Implementierungen befinden und es kann nur eine Schnittstelle pro Zeile geben.
<code><span><?php</span><span>namespace</span><span>Vendor</span>\<span>Package</span>; <span>use</span><span>FooClass</span>; <span>use</span><span>BarClass</span><span>as</span><span>Bar</span>; <span>use</span><span>OtherVendor</span>\<span>OtherPackage</span>\<span>BazClass</span>; <span><span>class</span><span>ClassName</span><span>extends</span><span>ParentClass</span><span>implements</span> \<span>ArrayAccess</span>, \<span>Countable</span>, \<span>Serializable</span> {</span><span>// constants, properties, methods</span> }</code>
Attribute
Alle Attribute müssen Sichtbarkeit deklarieren.
Var-Schlüsselwort darf nicht zum Deklarieren von Eigenschaften verwendet werden.
Pro Zeile darf nur ein Attribut deklariert werden.
Geschützte und private Attribute sollten nicht mit einem Präfix-Unterstrich gekennzeichnet werden.
Beispiel:
<code><span><?php</span><span>namespace</span><span>Vendor</span>\<span>Package</span>; <span><span>class</span><span>ClassName</span> {</span><span>public</span><span>$foo</span> = <span>null</span>; }</code>
Methoden
Alle Methoden müssen Sichtbarkeit deklarieren.
Geschützte und private Methoden sollten nicht mit einem Präfix-Unterstrich gekennzeichnet werden.
Bei der Deklaration einer Methode darf nach dem Methodennamen kein Leerzeichen stehen. { muss in derselben Zeile stehen, } muss in der nächsten Zeile des Hauptteils stehen. (Nach () darf kein Leerzeichen stehen, und davor darf kein Leerzeichen stehen.)
Ein Beispiel für eine Methodendeklaration ist wie folgt: Achten Sie auf die Position von Klammern, Kommas, Leerzeichen und geschweiften Klammern:
<code><span><?php</span><span>namespace</span><span>Vendor</span>\<span>Package</span>; <span><span>class</span><span>ClassName</span> {</span><span>public</span><span><span>function</span><span>fooBarBaz</span><span>(<span>$arg1</span>, &<span>$arg2</span>, <span>$arg3</span> = [])</span> {</span><span>// method body</span> } }</code>
Methodenparameter
In der Formale Parameterliste der Methode. Vor jedem Komma darf kein Leerzeichen stehen. Parameter mit Standardwerten müssen in der Parameterliste an letzter Stelle stehen.
<code><span><?php</span><span>namespace</span><span>Vendor</span>\<span>Package</span>; <span><span>class</span><span>ClassName</span> {</span><span>public</span><span><span>function</span><span>foo</span><span>(<span>$arg1</span>, &<span>$arg2</span>, <span>$arg3</span> = [])</span> {</span><span>// method body</span> } }</code>
Die Parameterliste kann in mehrere Zeilen aufgeteilt werden, und jede Unterzeile muss einen Einzug haben. Wenn Sie dies tun, muss sich der erste Parameter in einer eigenen Zeile befinden und es darf nur ein Parameter pro Zeile vorhanden sein.
Wenn die Parameterliste in mehrere Zeilen aufgeteilt ist, müssen sich die rechte Klammer ) und die linke geschweifte Klammer { in derselben Zeile befinden und vor ihnen muss ein Leerzeichen stehen.
<code><span><?php</span><span>namespace</span><span>Vendor</span>\<span>Package</span>; <span><span>class</span><span>ClassName</span> {</span><span>public</span><span><span>function</span><span>aVeryLongMethodName</span><span>( ClassTypeHint <span>$arg1</span>, &<span>$arg2</span>, array <span>$arg3</span> = [] )</span> {</span><span>// method body</span> } }</code>
Abstract, Final und Statisch
Abstract- und Final-Deklarationen müssen vor der Sichtbarkeit deklariert werden.
Die statische Deklaration muss nach der Sichtbarkeit erfolgen.
<code><span><?php</span><span>namespace</span><span>Vendor</span>\<span>Package</span>; <span>abstract</span><span><span>class</span><span>ClassName</span> {</span><span>protected</span><span>static</span><span>$foo</span>; <span>abstract</span><span>protected</span><span><span>function</span><span>zim</span><span>()</span>;</span><span>final</span><span>public</span><span>static</span><span><span>function</span><span>bar</span><span>()</span> {</span><span>// method body</span> } }</code>
Methoden- und Funktionsaufrufe
写方法或函数调用时,方法/函数名 和 左括号( 之间,必须没有空格, 右括号 ) 之前必须没有空格。在参数列表中,逗号间必须没有逗号,每个逗号后必须有一个空格。
<code><span><?php</span><span>$foo</span>->bar( <span>$longArgument</span>, <span>$longerArgument</span>, <span>$muchLongerArgument</span> );</span></code>
控制结构
控制结构通常遵循以下风格:
- 控制结构关键词后必须有一个空格。
- 左括号后必须没有空格。
- 右括号前必须没有空格。
- 又括号和左花括号之间必须有一个空格。
- body必须有一层缩进。
- 右花括号必须在body下一行。
- 每个控制结构的body必须用花括号括起来。 即保证外观统一,又减少了添加新行时引入的错误。
if, elseif, else
if 结构如下所示。注意括号、空格、花括号的位置;同时留意 else 和 elseif 与前一部分的 } 在同一行。
<code><span><?php</span><span>if</span> (<span>$expr1</span>) { <span>// if body</span> } <span>elseif</span> (<span>$expr2</span>) { <span>// elseif body</span> } <span>else</span> { <span>// else body;</span> }</code>
elseif关键字不应该被 else if 代替。
switch, case
Switch结构如下所示。注意括号、空格和花括号的位置。 case 语句相对于switch必须有一个缩进, break关键字 或者其他终结性的关键字必须和case body在同一缩进层级。在非空的case body,如果没有终结性语句,必须加上注释 // no break
。
<code><span><?php</span><span>switch</span> (<span>$expr</span>) { <span>case</span><span>0</span>: <span>echo</span><span>'First case, with a break'</span>; <span>break</span>; <span>case</span><span>1</span>: <span>echo</span><span>'Second case, which falls through'</span>; <span>// no break</span><span>case</span><span>2</span>: <span>case</span><span>3</span>: <span>case</span><span>4</span>: <span>echo</span><span>'Third case, return instead of break'</span>; <span>return</span>; <span>default</span>: <span>echo</span><span>'Default case'</span>; <span>break</span>; }</code>
while, do while
while结构如下所示。 注意括号、空格和花括号的位置。
<code><span><?php</span><span>while</span> (<span>$expr</span>) { <span>// structure body</span> }</code>
do-while接口如下所示。 注意括号、空格和花括号的位置。
<code><span><?php</span><span>do</span> { <span>// structure body;</span> } <span>while</span> (<span>$expr</span>);</code>
for
for 结构如下所示。 注意括号、空格和花括号的位置。
<code><span><?php</span><span>for</span> (<span>$i</span> = <span>0</span>; <span>$i</span> < <span>10</span>; <span>$i</span>++) { <span>// for body</span> }</code>
foreach
foreach 结构如下所示。 注意括号、空格和花括号的位置。
<code><span><?php</span><span>foreach</span> (<span>$iterable</span><span>as</span><span>$key</span> => <span>$value</span>) { <span>// foreach body</span> }</span></code>
try, catch
try-catch区块如下所示。 注意括号、空格和花括号的位置。
<code><span><?php</span><span>try</span> { <span>// try body</span> } <span>catch</span> (FirstExceptionType <span>$e</span>) { <span>// catch body</span> } <span>catch</span> (OtherExceptionType <span>$e</span>) { <span>// catch body</span> }</code>
Closure 闭包
声明闭包必须在function关键字后留一个空格,在use关键字前后各留一个空格。
左花括号必须在同一行, 右花括号必须在body的下一行。
参数或变量列表的左括号后 和 右括号前必须没有空格。
参数和变量列表的逗号前必须没有空格,每个逗号后必须有一个空格。
有默认值的参数必须排在最后。
闭包的声明如下所示。 注意括号,逗号,空格和花括号的位置:
<code><span><?php</span><span>$closureWithArgs</span> = <span><span>function</span><span>(<span>$arg1</span>, <span>$arg2</span>)</span> {</span><span>// body</span> }; <span>$closureWithArgsAndVars</span> = <span><span>function</span><span>(<span>$arg1</span>, <span>$arg2</span>)</span><span>use</span><span>(<span>$var1</span>, <span>$var2</span>)</span> {</span><span>// body</span> };</code>
参数列表和变量列表可以拆分到多行,每个子行有一层缩进。 这么做的时候,第一个列表成员必须独占一行,每行只能有一个列表成员。
参数或变量列表拆分为多行时,到了列表的末尾, 右括号 和 左花括号必须放在同一行,中间有一个空格。
例子:
<code><span><?php</span><span>$longArgs_noVars</span> = <span><span>function</span><span>( <span>$longArgument</span>, <span>$longerArgument</span>, <span>$muchLongerArgument</span> )</span> {</span><span>// body</span> }; <span>$noArgs_longVars</span> = <span><span>function</span><span>()</span><span>use</span><span>( <span>$longVar1</span>, <span>$longerVar2</span>, <span>$muchLongerVar3</span> )</span> {</span><span>// body</span> }; <span>$longArgs_longVars</span> = <span><span>function</span><span>( <span>$longArgument</span>, <span>$longerArgument</span>, <span>$muchLongerArgument</span> )</span><span>use</span><span>( <span>$longVar1</span>, <span>$longerVar2</span>, <span>$muchLongerVar3</span> )</span> {</span><span>// body</span> }; <span>$longArgs_shortVars</span> = <span><span>function</span><span>( <span>$longArgument</span>, <span>$longerArgument</span>, <span>$muchLongerArgument</span> )</span><span>use</span><span>(<span>$var1</span>)</span> {</span><span>// body</span> }; <span>$shortArgs_longVars</span> = <span><span>function</span><span>(<span>$arg</span>)</span><span>use</span><span>( <span>$longVar1</span>, <span>$longerVar2</span>, <span>$muchLongerVar3</span> )</span> {</span><span>// body</span> };</code>
注意:当闭包被直接作为函数或方法调用的参数时,以上规则同样适用。
<code><span><?php</span><span>$foo</span>->bar( <span>$arg1</span>, <span><span>function</span><span>(<span>$arg2</span>)</span><span>use</span><span>(<span>$var1</span>)</span> {</span><span>// body</span> }, <span>$arg3</span> );</span></code>
结语
本指南刻意忽略了许多风格和实践。包括但不限于:
- 声明全局变量和全局常量。
- 声明函数。
- 操作符和赋值。
- 行间对齐。
- 注释和文档区。
- 类名前后缀。
- 最佳实践。
Future recommendations MAY revise and extend this guide to address those or other elements of style and practice.
附录A 调查
In writing this style guide, the group took a survey of member projects to determine common practices. The survey is retained herein for posterity.
调查数据
<code>url,<span>http</span>:<span>//</span>www.horde.org<span>/apps/horde/docs/CODING_STANDARDS,http:/</span><span>/pear.php.net/manual/en/standards.php,http:/</span><span>/solarphp.com/manual/appendix-standards.style,http:/</span><span>/framework.zend.com/manual/en/coding-standard.html,http:/</span><span>/symfony.com/doc/2.0/contributing/code/standards.html,http:/</span><span>/www.ppi.io/docs/coding-standards.html,https:/</span><span>/github.com/ezsystems/ezp-next/wiki/codingstandards,http:/</span><span>/book.cakephp.org/2.0/en/contributing/cakephp-coding-conventions.html,https:/</span><span>/github.com/UnionOfRAD/lithium/wiki/Spec%3A-Coding,http:/</span><span>/drupal.org/coding-standards,http:/</span><span>/code.google.com/p/sabredav/</span>,<span>http</span>:<span>//</span>area51.phpbb.com<span>/docs/31x/coding-guidelines.html,https:/</span><span>/docs.google.com/a/zikula.org/document/edit?authkey=CPCU0Us&hgd=1&id=1fcqb93Sn-hR9c0mkN6m_tyWnmEvoswKBtSc0tKkZmJA,http:/</span><span>/www.chisimba.com,n/a,https:/</span><span>/github.com/Respect/project-info/blob/master/coding-standards-sample.php,n/a,Object Calisthenics for PHP,http:/</span><span>/doc.nette.org/en/coding-standard,http:/</span><span>/flow3.typo3.org,https:/</span><span>/github.com/propelorm/Propel2/wiki/Coding-Standards,http:/</span>/developer.joomla.org/coding-standards.html voting,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>no</span>,<span>no</span>,<span>no</span>,?,<span>yes</span>,<span>no</span>,<span>yes</span> indent_type,<span>4</span>,<span>4</span>,<span>4</span>,<span>4</span>,<span>4</span>,tab,<span>4</span>,tab,tab,<span>2</span>,<span>4</span>,tab,<span>4</span>,<span>4</span>,<span>4</span>,<span>4</span>,<span>4</span>,<span>4</span>,tab,tab,<span>4</span>,tab line_length_limit_soft,<span>75</span>,<span>75</span>,<span>75</span>,<span>75</span>,<span>no</span>,<span>85</span>,<span>120</span>,<span>120</span>,<span>80</span>,<span>80</span>,<span>80</span>,<span>no</span>,<span>100</span>,<span>80</span>,<span>80</span>,?,?,<span>120</span>,<span>80</span>,<span>120</span>,<span>no</span>,<span>150</span> line_length_limit_hard,<span>85</span>,<span>85</span>,<span>85</span>,<span>85</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>100</span>,?,<span>no</span>,<span>no</span>,<span>no</span>,<span>100</span>,<span>100</span>,?,<span>120</span>,<span>120</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span> 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,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>no</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>no</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span> always_use_control_braces,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>no</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>no</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>no</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span>,<span>yes</span> 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,<span>0</span>/<span>1</span>,<span>0</span>/<span>1</span>,<span>0</span>/<span>1</span>,<span>1</span>/<span>2</span>,<span>1</span>/<span>2</span>,<span>1</span>/<span>2</span>,<span>1</span>/<span>2</span>,<span>1</span>/<span>1</span>,<span>1</span>/<span>1</span>,<span>1</span>/<span>2</span>,<span>1</span>/<span>2</span>,<span>1</span>/<span>1</span>,<span>1</span>/<span>2</span>,<span>1</span>/<span>2</span>,<span>1</span>/<span>2</span>,<span>1</span>/<span>2</span>,<span>1</span>/<span>2</span>,<span>1</span>/<span>2</span>,<span>0</span>/<span>1</span>,<span>1</span>/<span>1</span>,<span>1</span>/<span>2</span>,<span>1</span>/<span>2</span> function_space_after,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span> closing_php_tag_required,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>yes</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>yes</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>yes</span>,<span>no</span>,<span>no</span> 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,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>yes</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>yes</span>,?,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span> blank_line_after_php,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>yes</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>no</span>,<span>yes</span>,<span>yes</span>,<span>no</span>,<span>no</span>,<span>yes</span>,?,<span>yes</span>,<span>yes</span>,<span>no</span>,<span>yes</span>,<span>no</span>,<span>yes</span>,<span>no</span> 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</code>
调查说明
indent_type: The type of indenting. tab = “Use a tab”, 2 or 4 = “number of spaces”
line_length_limit_soft: The “soft” line length limit, in characters. ? = not discernible or no response, no means no limit.
line_length_limit_hard: The “hard” line length limit, in characters. ? = not discernible or no response, no means no limit.
class_names: How classes are named. lower = lowercase only, lower_under = lowercase with underscore separators, studly = StudlyCase.
class_brace_line: Does the opening brace for a class go on the same line as the class keyword, or on the next line after it?
constant_names: How are class constants named? upper = Uppercase with underscore separators.
true_false_null: Are the true, false, and null keywords spelled as all lower case, or all upper case?
method_names: How are methods named? camel = camelCase, lower_under = lowercase with underscore separators.
method_brace_line: Does the opening brace for a method go on the same line as the method name, or on the next line?
control_brace_line: Does the opening brace for a control structure go on the same line, or on the next line?
control_space_after: Is there a space after the control structure keyword?
always_use_control_braces: Do control structures always use braces?
else_elseif_line: When using else or elseif, does it go on the same line as the previous closing brace, or does it go on the next line?
case_break_indent_from_switch: How many times are case and break indented from an opening switch statement?
function_space_after: Do function calls have a space after the function name and before the opening parenthesis?
closing_php_tag_required: In files containing only PHP, is the closing ?> tag required?
line_endings: What type of line ending is used?
static_or_visibility_first: When declaring a method, does static come first, or does the visibility come first?
control_space_parens: In a control structure expression, is there a space after the opening parenthesis and a space before the closing parenthesis? yes = if (
blank_line_after_php: Is there a blank line after the opening PHP tag?
class_method_control_brace: A summary of what line the opening braces go on for classes, methods, and control structures.
调查结果
<code><span>indent_type:</span> tab: <span>7</span><span>2</span>: <span>1</span><span>4</span>: <span>14</span><span>line_length_limit_soft:</span> ?: <span>2</span> no: <span>3</span><span>75</span>: <span>4</span><span>80</span>: <span>6</span><span>85</span>: <span>1</span><span>100</span>: <span>1</span><span>120</span>: <span>4</span><span>150</span>: <span>1</span><span>line_length_limit_hard:</span> ?: <span>2</span> no: <span>11</span><span>85</span>: <span>4</span><span>100</span>: <span>3</span><span>120</span>: <span>2</span><span>class_names:</span> ?: <span>1</span> lower: <span>1</span> lower_under: <span>1</span> studly: <span>19</span><span>class_brace_line:</span> next: <span>16</span> same: <span>6</span><span>constant_names:</span> upper: <span>22</span><span>true_false_null:</span> lower: <span>19</span> upper: <span>3</span><span>method_names:</span> camel: <span>21</span> lower_under: <span>1</span><span>method_brace_line:</span> next: <span>15</span> same: <span>7</span><span>control_brace_line:</span> next: <span>4</span> same: <span>18</span><span>control_space_after:</span> no: <span>2</span> yes: <span>20</span><span>always_use_control_braces:</span> no: <span>3</span> yes: <span>19</span><span>else_elseif_line:</span> next: <span>6</span> same: <span>16</span><span>case_break_indent_from_switch:</span><span>0</span>/<span>1</span>: <span>4</span><span>1</span>/<span>1</span>: <span>4</span><span>1</span>/<span>2</span>: <span>14</span><span>function_space_after:</span> no: <span>22</span><span>closing_php_tag_required:</span> no: <span>19</span> yes: <span>3</span><span>line_endings:</span> ?: <span>5</span> LF: <span>17</span><span>static_or_visibility_first:</span> ?: <span>5</span> either: <span>7</span> static: <span>4</span> visibility: <span>6</span><span>control_space_parens:</span> ?: <span>1</span> no: <span>19</span> yes: <span>2</span><span>blank_line_after_php:</span> ?: <span>1</span> no: <span>13</span> yes: <span>8</span><span>class_method_control_brace:</span> next/next/next: <span>4</span> next/next/same: <span>11</span> next/same/same: <span>1</span> same/same/same: <span>6</span></code>
以上就介绍了PHP编码风格指南 (PHP-FIG PSR-2),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Die Hijacking der Sitzung kann in den folgenden Schritten erreicht werden: 1. Erhalten Sie die Sitzungs -ID, 2. Verwenden Sie die Sitzungs -ID, 3. Halten Sie die Sitzung aktiv. Zu den Methoden zur Verhinderung der Sitzung der Sitzung in PHP gehören: 1. Verwenden Sie die Funktion Session_regenerate_id (), um die Sitzungs -ID zu regenerieren. 2. Store -Sitzungsdaten über die Datenbank, 3. Stellen Sie sicher, dass alle Sitzungsdaten über HTTPS übertragen werden.

Es gibt vier Hauptfehlertypen in PHP: 1. Nichts: Das geringste unterbrochen das Programm nicht, wie z. B. Zugriff auf undefinierte Variablen; 2. Warnung: Ernst als Bekanntmachung, wird das Programm nicht kündigen, z. B. keine Dateien; 3. FatalError: Das schwerwiegendste wird das Programm beenden, z. 4. Parseerror: Syntaxfehler verhindern, dass das Programm ausgeführt wird, z. B. das Vergessen, das End -Tag hinzuzufügen.

PHP und Python haben jeweils ihre eigenen Vorteile und wählen nach den Projektanforderungen. 1.PHP ist für die Webentwicklung geeignet, insbesondere für die schnelle Entwicklung und Wartung von Websites. 2. Python eignet sich für Datenwissenschaft, maschinelles Lernen und künstliche Intelligenz mit prägnanter Syntax und für Anfänger.

Zu den HTTP -Anforderungsmethoden gehören GET, Post, Put und Löschen, mit denen Ressourcen erhalten, übermittelt, aktualisiert und gelöscht werden. 1. Die GET -Methode wird verwendet, um Ressourcen zu erhalten, und eignet sich für Lesevorgänge. 2. Die Post -Methode wird verwendet, um Daten zu übermitteln und häufig neue Ressourcen zu erstellen. 3. Die Put -Methode wird zum Aktualisieren von Ressourcen verwendet und eignet sich für vollständige Updates. V.

In PHP sollten die Funktionen für Passwort_Hash und passwart_verify verwendet werden, um sicheres Passwort -Hashing zu implementieren, und MD5 oder SHA1 sollte nicht verwendet werden. 1) Passwort_hash generiert einen Hash, der Salzwerte enthält, um die Sicherheit zu verbessern. 2) Passwort_Verify prüfen Sie das Passwort und sicherstellen Sie die Sicherheit, indem Sie die Hash -Werte vergleichen. 3) MD5 und SHA1 sind anfällig und fehlen Salzwerte und sind nicht für die Sicherheit der modernen Passwort geeignet.

PHP ist eine Skriptsprache, die auf der Serverseite weit verbreitet ist und insbesondere für die Webentwicklung geeignet ist. 1.PHP kann HTML einbetten, HTTP -Anforderungen und Antworten verarbeiten und eine Vielzahl von Datenbanken unterstützt. 2.PHP wird verwendet, um dynamische Webinhalte, Prozessformdaten, Zugriffsdatenbanken usw. mit starker Community -Unterstützung und Open -Source -Ressourcen zu generieren. 3. PHP ist eine interpretierte Sprache, und der Ausführungsprozess umfasst lexikalische Analyse, grammatikalische Analyse, Zusammenstellung und Ausführung. 4.PHP kann mit MySQL für erweiterte Anwendungen wie Benutzerregistrierungssysteme kombiniert werden. 5. Beim Debuggen von PHP können Sie Funktionen wie error_reporting () und var_dump () verwenden. 6. Optimieren Sie den PHP-Code, um Caching-Mechanismen zu verwenden, Datenbankabfragen zu optimieren und integrierte Funktionen zu verwenden. 7

Die Pfeilfunktion wurde in Php7.4 eingeführt und ist eine vereinfachte Form von kurzen Schließungen. 1) Sie werden mit dem Operator => Operator definiert, weglassen und Schlüsselwörter verwenden. 2) Die Pfeilfunktion erfasst automatisch die aktuelle Umfangsvariable ohne das Schlüsselwort verwenden. 3) Sie werden häufig in Rückruffunktionen und kurzen Berechnungen verwendet, um die Einfachheit und Lesbarkeit von Code zu verbessern.

PHP wird in E-Commerce, Content Management Systems und API-Entwicklung häufig verwendet. 1) E-Commerce: Wird für die Einkaufswagenfunktion und Zahlungsabwicklung verwendet. 2) Content -Management -System: Wird für die Erzeugung der dynamischen Inhalte und die Benutzerverwaltung verwendet. 3) API -Entwicklung: Wird für die erholsame API -Entwicklung und die API -Sicherheit verwendet. Durch Leistungsoptimierung und Best Practices werden die Effizienz und Wartbarkeit von PHP -Anwendungen verbessert.
