欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

psr2编码样式 博客分类: PHP

程序员文章站 2024-03-19 12:25:58
...

代码必须遵循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
);