PHP规范PSR2(编码指南)介绍(一)

本指南扩展和扩展了基本编码标准PSR-1。

本指南的目的是在扫描来自不同作者的代码时减少认知摩擦。它通过枚举一组共享规则和对如何格式化PHP代码的期望来实现。

这里的风格规则源于各个成员项目之间的共性。当各个作者跨多个项目进行协作时,在所有这些项目中使用一套指南会很有帮助。因此,本指南的好处不在于规则本身,而在于共享这些规则。

本文档中的关键词“必须”,“必须”,“必需”,“应该”,“不应该”,“应该”,“不应该”,“推荐”,“可以”和“可选”按照RFC 2119中的描述进行解释。

1、预览

  • 代码必须遵循“编码风格指南”PSR [PSR-1]。
  • 代码必须使用4个空格进行缩进,而不是制表符。
  • 线路长度不得有硬性限制;软限制必须是120个字符;线条不应该是80个字符或更少。
  • 在命名空间声明之后必须有一个空行,并且在使用声明块之后必须有一个空行。
  • 打开类的大括号必须在下一行,并且关闭大括号必须在主体后面的下一行。
  • 打开方法的括号必须在下一行,并且关闭括号必须在主体后面的下一行。
  • 必须在所有属性和方法上声明可见性;必须在可见性之前声明抽象和最终;必须在可见性之后声明static。
  • 控制结构关键字必须在它们之后有一个空格;方法和函数调用绝不可以。
  • 控制结构的开口括号必须在同一条线上,并且关闭括号必须在主体后面的下一行。
  • 控制结构的开括号必须在它们后面没有空格,并且控制结构的右括号之前不能有空格。

1.1 例子

此示例包含以下一些规则作为快速概述:

<?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()
    {
        // method body
    }
}

2、通用

2.1 基本编码标准

代码必须遵循PSR-1中列出的所有规则。

2.2  文档

所有PHP文件必须使用Unix LF(换行)行结尾。

所有PHP文件必须以一个空行结束。

必须从仅包含PHP的文件中省略关闭?>标记。

2.3 行

线路长度不得有硬性限制。

线路长度的软限制必须是120个字符;自动样式检查器必须发出警告,但绝不能在软限制上出错。

行不应超过80个字符;超过的行应该被分成多个后续行,每行不超过80个字符。

在非空白行的末尾不得有尾随空格。

可以添加空行以提高可读性并指示相关的代码块。

每行不得超过一个语句。

2.4 缩进

代码必须使用4个空格的缩进,并且不得使用制表符进行缩进。

N.b。:仅使用空格,而不是将空格与制表符混合,有助于避免差异,补丁,历史记录和注释的问题。空间的使用还使得易于插入细粒度的子压痕用于线间对齐。

2.5。关键字和真/假/空

PHP关键字必须是小写的。

PHP常量true,false和null必须是小写的。

3.命名空间和使用声明

如果存在,则在命名空间声明后必须有一个空行。

如果存在,所有使用声明必须在命名空间声明之后。

每个声明必须有一个use关键字。

使用块后必须有一个空行。

例如:

<?php
namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

// ... additional PHP code ...

4、类,属性和方法

4.1 扩展和实施

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

班级的开口支架必须自成一线;班级的结束括号必须在身体后面的下一行。

<?php
namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}

实现列表可以分为多行,每行后续行缩进一次。这样做时,列表中的第一项必须在下一行,并且每行必须只有一个接口。

<?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.2 属性

必须在所有属性上声明可见性。

var关键字绝不能用于声明属性。

每个语句不得超过一个属性。

属性名称不应以单个下划线为前缀,以表示受保护或私有可见性。

属性声明如下所示。

<?php
namespace Vendor\Package;

class ClassName
{
    public $foo = null;
}

4.3 方法

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

方法名称不应以单个下划线为前缀,以指示受保护或私有可见性。

方法名称不得在方法名称后面用空格声明。开口支撑必须单独行,并且闭合支撑必须在身体后面的下一行。在左括号后面不能有空格,并且在右括号之前不能有空格。

方法声明如下所示。请注意括号,逗号,空格和大括号的位置:

<?php
namespace Vendor\Package;

class ClassName
{
    public function fooBarBaz($arg1, &$arg2, $arg3 = [])
    {
        // method body
    }
}

猜你喜欢

转载自blog.csdn.net/u013702678/article/details/83450502