首页 后端开发 php教程 PHP编码风格指南 (PHP-FIG PSR-2)

PHP编码风格指南 (PHP-FIG PSR-2)

Aug 08, 2016 am 09:28 AM
line next

本指南是 PSR-1 基本编码标准 的扩展。

本指罗列了通用的PHP代码格式规则和建议,意在减少不同作者的编码风格差异带来的认知障碍。

这里的风格约定衍生自若干成员项目。指南作者们在多个项目中协作,推动了这些指导条款落地。 指南的关键在于共享,而不是规则本身。

文中涉及的关键词 “MUST 必须”, “MUST NOT 必须不”, “REQUIRED 必需”, “SHALL 会”, “SHALL NOT 不会”, “SHOULD 应该”, “SHOULD NOT 不应该”, “RECOMMENDED 推荐的”, “MAY 可能”, 和 “OPTIONAL 可选的” 在RFC 2119 中有具体描述.

概览

  1. 代码必需遵循 “基础编码标准” PSR [PSR-1]。
  2. 代码缩进必须使用 4 空格,而不是tab。
  3. 行长度必须无硬性限制; 软性限制必须为120字符;应该少于等于80字。
  4. namespace声明后必须有一个空行,use声明后也必须有一个空行。
  5. 类的{ 必须在类名的下一行, }必须在body的下一行。
  6. 方法的 { 必须在方法签名的下一行,} 必须在body的下一行。
  7. 所有的属性和方法都要设置可见性; abstract和 final必须在可见性之前声明;static 必须在可见性后声明。
  8. 结构控制关键词后必须有一个空格; 方法和函数必须没有空格。
  9. 结构控制的 { 必须在同一行,} 必须在body的下一行。
  10. 结构控制的 ( 后必须有空格, 结构控制的 ) 前必须没有空格。

例子

下面是一个综合的例子,可以帮助你对规则有一个概略的认识。

<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>
登录后复制

基本规则

基本编码标准

代码必须遵循PSR-1的条款。

文件

  1. 所有文件必须使用 Unix LF (linefeed) 换行。
  2. 所有PHP文件必须使用单个空行结束。
  3. 只包含PHP的代码必须忽略php结束标记 ? >。

  1. 行长度必须没有硬性限制。
  2. 长度的软性限制必须为120字符;自动代码风格检查必须将120字设置为警告,必须不能设置为错误。
  3. 行不应该超过80字符;超过这个长度的行应该切分为多个不超过80字符的行。
  4. 非空行的结束必须没有尾随空格。
  5. 为增强可读性,可增加空行来标志代码的关联性。
  6. 每行包含的语句必须不能超过1条。

缩进

  1. 代码必须使用 4 空格的缩进, 必须不用tab作为缩进。

注意:只使用空格,不用tab,有助于避免diffs,patches, history和annotations的问题。使用空格也有助于对齐。

关键词(保留字) 和 true/false/null

  1. PHP保留字必须小写.
  2. PHP常量 true, false和 null 必须小写.

Namespace 和 Use 声明

  1. namespace 声明之后必须有空行。
  2. 所有use 声明,必须在namespace声明之后。
  3. 每个声明必须单独使用一个use。
  4. use声明区之后必须有一个空行。

例如:

<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></span></code>
登录后复制

类, 属性 和 方法

这里的“类”包括 class、interface 和 trait。

继承 和 实现

extends 和 implements 关键字必须和类名在同一行声明。

类的 { 必须独占一行; } 必须在body的下一行。

<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>
}</span></code>
登录后复制

implements 多个接口时,接口列表可以被分到多行,每个子行有一个缩进。如果这么做,第一个接口必须在implements 下一行,每行只能有一个接口。

<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>
}</span></code>
登录后复制

属性

所有属性都必须声明 visibility(可见性)。

Var 关键字必须不能用于声明属性。

每行必须只声明一个属性。

不应该通过前缀下划线来标示protected和private的属性。

例:

<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>;
}</span></code>
登录后复制

方法

所有方法都必须声明可见性。

不应该通过前缀下划线来标示protected和private的方法。

声明方法时,方法名的后必须没有空格。 { 必须在同一行, } 必须在body的下一行。 (后必须没有空格,) 前必须没有空格。

一个方法声明的例子如下,注意 小括号,逗号,空格 和 花括号 的位置:

<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>
    }
}</span></code>
登录后复制

方法参数

方法的形参列表中, 每个逗号前必须没有空格。有默认值的参数必须在参数列表的最后。

<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>
    }
}</span></code>
登录后复制

参数列表可以切分为多行,每个子行要有一个缩进。如果这么做,第一个参数必须独占一行,每行只能有一个参数。

参数列表切分为多行时,右括号)和左花括号{必须在同一行,之前必须有一个空格。

<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>
    }
}</span></code>
登录后复制

abstract, final 和 static

abstract和final声明必须在可见性之前声明。
static声明必须在可见性之后。

<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>
    }
}</span></code>
登录后复制

方法和函数调用

写方法或函数调用时,方法/函数名 和 左括号( 之间,必须没有空格, 右括号 ) 之前必须没有空格。在参数列表中,逗号间必须没有逗号,每个逗号后必须有一个空格。

<code><span><?php </span><span>$foo</span>->bar(
    <span>$longArgument</span>,
    <span>$longerArgument</span>,
    <span>$muchLongerArgument</span>
);</span></code>
登录后复制

控制结构

控制结构通常遵循以下风格:

  1. 控制结构关键词后必须有一个空格。
  2. 左括号后必须没有空格。
  3. 右括号前必须没有空格。
  4. 又括号和左花括号之间必须有一个空格。
  5. body必须有一层缩进。
  6. 右花括号必须在body下一行。
  7. 每个控制结构的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>
}</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>;
}</span></code>
登录后复制

while, do while

while结构如下所示。 注意括号、空格和花括号的位置。

<code><span><?php </span><span>while</span> (<span>$expr</span>) {
    <span>// structure body</span>
}</span></code>
登录后复制

do-while接口如下所示。 注意括号、空格和花括号的位置。

<code><span><?php </span><span>do</span> {
    <span>// structure body;</span>
} <span>while</span> (<span>$expr</span>);</span></code>
登录后复制

for

for 结构如下所示。 注意括号、空格和花括号的位置。

<code><span><?php </span><span>for</span> (<span>$i</span> = <span>0</span>; <span>$i</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>
}</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>
};</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>
};</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 ( expr),no=if(expr).

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教程有兴趣的朋友有所帮助。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

11个最佳PHP URL缩短脚本(免费和高级) 11个最佳PHP URL缩短脚本(免费和高级) Mar 03, 2025 am 10:49 AM

长URL(通常用关键字和跟踪参数都混乱)可以阻止访问者。 URL缩短脚本提供了解决方案,创建了简洁的链接,非常适合社交媒体和其他平台。 这些脚本对于单个网站很有价值

Instagram API简介 Instagram API简介 Mar 02, 2025 am 09:32 AM

在Facebook在2012年通过Facebook备受瞩目的收购之后,Instagram采用了两套API供第三方使用。这些是Instagram Graph API和Instagram Basic Display API。作为开发人员建立一个需要信息的应用程序

在Laravel中使用Flash会话数据 在Laravel中使用Flash会话数据 Mar 12, 2025 pm 05:08 PM

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

构建具有Laravel后端的React应用程序:第2部分,React 构建具有Laravel后端的React应用程序:第2部分,React Mar 04, 2025 am 09:33 AM

这是有关用Laravel后端构建React应用程序的系列的第二个也是最后一部分。在该系列的第一部分中,我们使用Laravel为基本的产品上市应用程序创建了一个RESTFUL API。在本教程中,我们将成为开发人员

简化的HTTP响应在Laravel测试中模拟了 简化的HTTP响应在Laravel测试中模拟了 Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

php中的卷曲:如何在REST API中使用PHP卷曲扩展 php中的卷曲:如何在REST API中使用PHP卷曲扩展 Mar 14, 2025 am 11:42 AM

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

在Codecanyon上的12个最佳PHP聊天脚本 在Codecanyon上的12个最佳PHP聊天脚本 Mar 13, 2025 pm 12:08 PM

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

宣布 2025 年 PHP 形势调查 宣布 2025 年 PHP 形势调查 Mar 03, 2025 pm 04:20 PM

2025年的PHP景观调查调查了当前的PHP发展趋势。 它探讨了框架用法,部署方法和挑战,旨在为开发人员和企业提供见解。 该调查预计现代PHP Versio的增长

See all articles