代码必须遵循PSR-1
代码必须使用4个空格作为缩进,不能使用TABs
每行长度不是硬性限制的,必须孔子在120个字符,最好应该不超过80个字符
在声明命名空间后必须有一个空行,同时必须在 引用“use”块后有一个空行
引用声明(use)块必须在命名空间声明后
<?php
namespace Vendor\Package;
[---声明命名空间后的空行---]
use FooInterface;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
[--其他类引用块后的空行--]
class Foo extends Bar implements FooInterface
{ [--类的开始大括号必须新起一行--]
public function sampleMethod($a, $b = null)
{[--方法的开始大括号必须新起一行--]
if ($a === $b) {[--程序结构体的开始大括号必须在同一行,开始括号后,结束括号前都没有空格--]
bar();
} elseif ($a > $b) {
$foo->bar($arg1);
} else {
BazClass::bar($arg2, $arg3);
} [--程序结构体结束大括号必须单独起一行--]
}[--方法的结束大括号必须新起一行--]
final public static function bar() [--可见性在static前,final和abstract在可见性前]
{
// method body
}
}[--类的结束大括号必须新起一行--]
类的大括号开始必须在下一行,关闭大括号必须是在类的最后单独一行
方法的大括号开始必须在下一行,关闭大括号必须是在方法的最后单独一行
必须声明所有方法和属性的可见性(public/protected/private),abstrat(抽象) 和 final(无法被继承的)必须在可见性前声明,static(静态)必须在可见性后声明
流程控制结构关键字后面必须有一个空格;方法和函数调用后面不能有空格
流程控制的开始大括号不行在同一行,关闭结束大括号必须在流程控制体的最后单独一行
流程控制结构后开始括号后以及结束关闭括号前都不能有空格
PHP关键字必须是小写:true,false,null
关键字extends 和 implements 必须和类名在同一行
implements(类似多继承)可以被分割成多行,后面每行都要缩进一次, 一行只能有一个interface
样式1 ok:
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
// constants, properties, methods
}
样式2 ok:
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class ClassName extends ParentClass implements
\ArrayAccess,
\Countable,
\Serializable
{
// constants, properties, methods
}
样式3:WRONG
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class ClassName extends ParentClass implements
\ArrayAccess,
\Countable,\Serializable
{
// constants, properties, methods
}
样式4:WRONG
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class ClassName extends ParentClass implements \Serializable,
\ArrayAccess,
\Countable
{
// constants, properties, methods
}
关键字 var 不能用于声明一个属性,一行不能声明多个属性,属性名不应以下划线为前缀来表示受保护或私有的可见性。
多个方法参数和后面的逗号之间不能有空格;在每个逗号后面都必须有一个空格;如果参数列表必须分割成多行时,每行都有一个缩进,一旦这样做,第一个参数必须新起一行,每行必须有一个参数 右括号在参数后新起一行,并和方法做大括号在同一行
示例1 ok:
<?php
namespace Vendor\Package;
class ClassName
{
public function foo($arg1, &$arg2, $arg3 = [])
{
// method body
}
}
示例2 ok:
<?php
namespace Vendor\Package;
class ClassName
{
public function aVeryLongMethodName(
ClassTypeHint $arg1,
&$arg2,
array $arg3 = []
) {
// method body
}
}
示例3 WRONG:
<?php
namespace Vendor\Package;
class ClassName
{
public function aVeryLongMethodName(
ClassTypeHint $arg1,
&$arg2,
array $arg3 = []
)
{
// method body
}
}
示例4 WRONG:
<?php
namespace Vendor\Package;
class ClassName
{
public function aVeryLongMethodName(
ClassTypeHint $arg1,
&$arg2,
array $arg3 = [] )
{
// method body
}
}
示例5 WRONG:
<?php
namespace Vendor\Package;
class ClassName
{
public function aVeryLongMethodName(
ClassTypeHint $arg1,
&$arg2,
array $arg3 = []
){
// method body
}
}
调用一个行数和方法时候在操作符和函数方法名之间不能有空格,同样在第一个参数前,最后一个参数后都不能有空格;如果参数是多行话,同样是从第一个参数开始新起一行,一次缩进,每行一个参数。
几种程序结构标准格式
if elseif else
<?php
if ($expr1) {
// if body
} elseif ($expr2) {
// elseif body
} else {
// else body;
}
switch,case:
<?php
switch ($expr) {
case 0:
echo 'First case, with a break';
break;
case 1:
echo 'Second case, which falls through';
// no break
case 2:
case 3:
case 4:
echo 'Third case, return instead of break';
return;
default:
echo 'Default case';
break;
}
while:
<?php
while ($expr) {
// structure body
}
do while:
<?php
do {
// structure body;
} while ($expr);
for:
<?php
for ($i = 0; $i < 10; $i++) {
// for body
}
foreach
<?php
foreach ($iterable as $key => $value) {
// foreach body
}
try, catch
<?php
try {
// try body
} catch (FirstExceptionType $e) {
// catch body
} catch (OtherExceptionType $e) {
// catch body
}
闭包中每个参数一行,匿名函数中 function后和use前后空格
<?php
$foo->bar(
$arg1,
function ($arg2) use ($var1) {
// body
},
$arg3
);