search
HomeBackend DevelopmentPHP TutorialPHP Coding Style Guide (PHP-FIG PSR-2)

This guide is an extension of the PSR-1 Basic Coding Standard.

This guide lists common PHP code format rules and suggestions, aiming to reduce the cognitive barriers caused by differences in coding styles of different authors.

The style conventions here are derived from several member projects. Guideline authors collaborated on multiple projects to advance these guidance provisions. The key to guidance is sharing, not the rules themselves.

Keywords involved in the article are "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED" Recommended, MAY, and OPTIONAL are described in RFC 2119.

Overview

  1. Code must follow the "Basic Coding Standards" PSR [PSR-1].
  2. Code indentation must use 4 spaces instead of tabs.
  3. There must be no hard limit on line length; the soft limit must be 120 characters; it should be less than or equal to 80 characters.
  4. There must be a blank line after the namespace declaration, and there must also be a blank line after the use declaration.
  5. The { of the class must be on the next line of the class name, and } must be on the next line of the body.
  6. The { of the method must be on the next line of the method signature, and } must be on the next line of the body.
  7. All properties and methods must have visibility set; abstract and final must be declared before visibility; static must be declared after visibility.
  8. There must be a space after the structure control keyword; methods and functions must have no space.
  9. The { of the structure control must be on the same line, and } must be on the next line of the body.
  10. There must be a space after the structure-controlled ( and there must be no space before the structure-controlled ).

Example

The following is a comprehensive example to help you have a general understanding of the rules.

<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>

Basic Rules

Basic Coding Standards

Code must follow the terms of PSR-1.

Files

  1. All files must use Unix LF (linefeed) line breaks.
  2. All PHP files must end with a single blank line.
  3. Code containing only PHP must ignore the php closing tag ? >.

Line

  1. There must be no hard limit on line length.
  2. The soft limit on length must be 120 characters; automatic code style checking must set 120 characters as a warning and must not be set as an error.
  3. Lines should not exceed 80 characters; lines exceeding this length should be split into multiple lines of no more than 80 characters.
  4. Non-blank lines must end with no trailing spaces.
  5. To enhance readability, blank lines can be added to mark the relevance of the code.
  6. Each line must contain no more than 1 statement.

Indentation

  1. Code must use 4 spaces for indentation, and tabs must not be used as indentation.

Note: Only use spaces, no tabs, to help avoid problems with diffs, patches, history and annotations. Using spaces also helps with alignment.

Keywords (reserved words) and true/false/null

  1. PHP reserved words must be lowercase.
  2. PHP constants true, false and null must be lowercase.

Namespace and Use declarations

  1. namespace declaration must be followed by Blank line.
  2. All use statements must come after the namespace statement.
  3. Each statement must use a separate use.
  4. There must be a blank line after the use declaration area.

For example:

<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, attribute and method

"Class" here includes class, interface and trait.

Inheritance and implementation

extends and implements keywords must be declared on the same line as the class name.

class { must occupy one line; } must be on the next line of the 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 When there are multiple interfaces, the interface list can be divided into multiple lines, and each subline has an indent. If you do this, the first interface must be on the line after implements, and there can be only one interface per line.

<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>

Properties

All properties must declare visibility.

Var keyword must not be used to declare properties.

Only one attribute must be declared per line.

Protected and private attributes should not be marked with a prefix underscore.

Example:

<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>

Methods

All methods must declare visibility.

Protected and private methods should not be marked with a prefix underscore.

When declaring a method, there must be no space after the method name. { must be on the same line, } must be on the next line of body. (There must be no space after (), and there must be no space before).

An example of a method declaration is as follows. Pay attention to the position of parentheses, commas, spaces and curly braces:

<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>

Method parameters

In the formal parameter list of the method, there must be no space before each comma. Parameters with default values ​​must be last in the parameter list.

<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>

The parameter list can be divided into multiple lines, and each sub-line must have an indent. If you do this, the first parameter must be on its own line, and there can only be one parameter per line.

When the parameter list is divided into multiple lines, the right bracket ) and the left curly bracket { must be on the same line, and there must be a space before them.

<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 and static

Abstract and final declarations must be declared before visibility.
The static declaration must come after visibility.

<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>

Method and function calls

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

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

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
What is the difference between unset() and session_destroy()?What is the difference between unset() and session_destroy()?May 04, 2025 am 12:19 AM

Thedifferencebetweenunset()andsession_destroy()isthatunset()clearsspecificsessionvariableswhilekeepingthesessionactive,whereassession_destroy()terminatestheentiresession.1)Useunset()toremovespecificsessionvariableswithoutaffectingthesession'soveralls

What is sticky sessions (session affinity) in the context of load balancing?What is sticky sessions (session affinity) in the context of load balancing?May 04, 2025 am 12:16 AM

Stickysessionsensureuserrequestsareroutedtothesameserverforsessiondataconsistency.1)SessionIdentificationassignsuserstoserversusingcookiesorURLmodifications.2)ConsistentRoutingdirectssubsequentrequeststothesameserver.3)LoadBalancingdistributesnewuser

What are the different session save handlers available in PHP?What are the different session save handlers available in PHP?May 04, 2025 am 12:14 AM

PHPoffersvarioussessionsavehandlers:1)Files:Default,simplebutmaybottleneckonhigh-trafficsites.2)Memcached:High-performance,idealforspeed-criticalapplications.3)Redis:SimilartoMemcached,withaddedpersistence.4)Databases:Offerscontrol,usefulforintegrati

What is a session in PHP, and why are they used?What is a session in PHP, and why are they used?May 04, 2025 am 12:12 AM

Session in PHP is a mechanism for saving user data on the server side to maintain state between multiple requests. Specifically, 1) the session is started by the session_start() function, and data is stored and read through the $_SESSION super global array; 2) the session data is stored in the server's temporary files by default, but can be optimized through database or memory storage; 3) the session can be used to realize user login status tracking and shopping cart management functions; 4) Pay attention to the secure transmission and performance optimization of the session to ensure the security and efficiency of the application.

Explain the lifecycle of a PHP session.Explain the lifecycle of a PHP session.May 04, 2025 am 12:04 AM

PHPsessionsstartwithsession_start(),whichgeneratesauniqueIDandcreatesaserverfile;theypersistacrossrequestsandcanbemanuallyendedwithsession_destroy().1)Sessionsbeginwhensession_start()iscalled,creatingauniqueIDandserverfile.2)Theycontinueasdataisloade

What is the difference between absolute and idle session timeouts?What is the difference between absolute and idle session timeouts?May 03, 2025 am 12:21 AM

Absolute session timeout starts at the time of session creation, while an idle session timeout starts at the time of user's no operation. Absolute session timeout is suitable for scenarios where strict control of the session life cycle is required, such as financial applications; idle session timeout is suitable for applications that want users to keep their session active for a long time, such as social media.

What steps would you take if sessions aren't working on your server?What steps would you take if sessions aren't working on your server?May 03, 2025 am 12:19 AM

The server session failure can be solved through the following steps: 1. Check the server configuration to ensure that the session is set correctly. 2. Verify client cookies, confirm that the browser supports it and send it correctly. 3. Check session storage services, such as Redis, to ensure that they are running normally. 4. Review the application code to ensure the correct session logic. Through these steps, conversation problems can be effectively diagnosed and repaired and user experience can be improved.

What is the significance of the session_start() function?What is the significance of the session_start() function?May 03, 2025 am 12:18 AM

session_start()iscrucialinPHPformanagingusersessions.1)Itinitiatesanewsessionifnoneexists,2)resumesanexistingsession,and3)setsasessioncookieforcontinuityacrossrequests,enablingapplicationslikeuserauthenticationandpersonalizedcontent.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.