php 标准规范

PHP Standard Recommendations【php 标准规范】

PSR-0:自动加载标准

已经被 PSR-4 替代,可以了解下

1. 强制:完全限定命名空间和类的格式:\<Vendor Name>\(<Namespace>\)*<Class Name>
2. 强制:每个命名空间必须有一个顶级命名空间 (Vendor Name)3. 每个命名空间中可以含有任意数量的子命名空间。
4. 当文件系统加载源文件时,命名空间之间的分隔符被转换为 DIRECTORY_SEPARATOR5. 类名<Class Name>中的下划线 _ 都被转换为 DIRECTORY_SEPARATOR。_ 没有什么特殊的意义。
6. 完全限定命名空间和类从文件系统加载源文件时会加上 .php 后缀。
7. 完全限定命名空间中的字母大小写可以是任何组合。

实例

\Zend\Mail\Message => /path/to/project/lib/vendor/Zend/Mail/Message.php

\namespace\package\Class_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php
\namespace\package_name\Class_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php

PSR-4 自动加载

class 指的是 classes, interfaces, traits 和其他相似结构。  
完全限定类名格式:\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>。
    
注意:psr4 后不再叫完全限定命名空间,而是完全限定类名。
1. 完全限定类名必须有一个顶级命名空间名称,也称 "vendor namespace"2. 完全限定类名可以有有一个或多个子命名空间。
3. 完全限定类名必须有一个最终的类名;
4. 下划线都是没有特殊含义的
5. 完全限定类名可以由任意大小写字母组成;
6. 所有类名必须以区分大小写的方式引用。
7. 完全限定类名中,去掉最前面的命名空间分隔符,前面连续的一个或多个命名空间和子命名空间,称为“命名空间前缀”,其必须与至少一个“文件基目录”相对应;
8. 紧接命名空间前缀后的子命名空间必须与相应的文件“基目录”的子目录相匹配,其中的命名空间分隔符将作为目录分隔符。
9. 末尾的类名必须与对应的以 .php 为后缀的文件同名(大小写敏感)。
10. 自动加载器(autoloader)的实现一定不能抛出异常、一定不能触发任一级别的错误信息以及不应该有返回值。

实例

完整类名命名空间前缀文件基目录文件路径
\Acme\Log\Writer\File_WriterAcme\Log\Writer./acme-log-writer/lib/./acme-log-writer/lib/File_Writer.php

PSR-1:基本编程规范

1. 文件标签必须是 <?php 或者 <?=2. 文件必须以不带BOMUTF-8 编码
3. 文件中的代码应该只能是定义类、函数、常量等声明,或者只能是一些副操作,如生成输出,改变 .ini 设置等。
4. 命名空间和类必须满足 psr0 或者 psr4。
5. 类名必须是 StudlyCaps 【大写开头的驼峰命名】规范。
6. 类中常量所有字母必须大写,下划线分隔。
7. 方法名称必须是 camelCase 驼峰命名规范。

解释

副操作包含却不仅限于:生成输出、直接的 requireinclude、连接外部服务、
修改 ini 配置、抛出错误或异常、修改全局或静态变量、读或写文件等。
<?php
// side effect: change ini settings
ini_set('error_reporting', E_ALL);

// side effect: loads a file
include "file.php";

// side effect: generates output
echo "<html>\n";

// declaration
function foo()
{
    // function body
}



<?php
// declaration
function foo()
{
    // function body
}

// conditional declaration is not a side effect
if (! function_exists('bar')) {
    function bar()
    {
        // function body
    }
}

PSR-2 编程风格规范

被 PSR-12 取代了。

PSR-12 编程风格规范

<?php

declare(strict_types=1);

namespace Vendor\Package;

use Vendor\Package\{ClassA as A, ClassB, ClassC as C};
use Vendor\Package\SomeNamespace\ClassD as D;

use function Vendor\Package\{functionA, functionB, functionC};

use const Vendor\Package\{ConstantA, ConstantB, ConstantC};

class Foo extends Bar implements FooInterface
{
    public function sampleFunction(int $a, int $b = null): array
    {
        if ($a === $b) {
            bar();
        } elseif ($a > $b) {
            $foo->bar($arg1);
        } else {
            BazClass::bar($arg2, $arg3);
        }
    }

    final public static function bar()
    {
        // method body
    }
}
  1. 换行必须是 Unix LF(linefeed)。
  2. 所有PHP文件都必须以非空行结尾,并以单个 LF 终止。
  3. 在仅包含PHP的文件中,必须省略 ?> 标记。
  4. 行长度必须不能有硬性限制。
  5. 行长的软限制必须为 120 个字符。
  6. 行数不能超过80个字符; 长于该行的行应分成多行,每行不超过80个字符。
  7. 行尾一定不能有尾随空格。
  8. 除非明确禁止,否则可以添加空行以提高可读性并指示相关的代码块。
  9. 每行不得超过一个语句。
  10. 代码必须为每个缩进级别使用 4 个空格的缩进,并且不得使用制表符进行缩进。
  11. 所有 PHP 保留的关键字和类型、均必须小写。
  12. 添加到将来的 PHP 版本中的任何新类型和关键字都必须小写。
  13. 必须使用类型关键字的缩写形式,即 bool 代替 boolean,int 代替 integer 等。

PHP 文件的头可能包含许多不同的块。如果存在,则下面的每个块都必须由单个空白行分隔,并且不得包含空白行。每个块都必须按照下面列出的顺序进行。

<?php 标签。
文件级文档块。
一个或多个声明语句。
文件的命名空间声明。
一个或多个基于类的 use 导入语句。
一个或多个基于函数的 use 导入语句。
一个或多个基于常量的 use 导入语句。
文件中的其余代码。

也适用于 HTMLPHP 混合文件。
    
<?php

/**
 * This file contains an example of coding styles.
 */

declare(strict_types=1);

namespace Vendor\Package;

use Vendor\Package\{ClassA as A, ClassB, ClassC as C};
use Vendor\Package\SomeNamespace\ClassD as D;
use Vendor\Package\AnotherNamespace\ClassE as E;

use function Vendor\Package\{functionA, functionB, functionC};
use function Another\Vendor\functionD;

use const Vendor\Package\{CONSTANT_A, CONSTANT_B, CONSTANT_C};
use const Another\Vendor\CONSTANT_D;

/**
 * FooBar is an example class.
 */
class FooBar
{
    // ... additional PHP code ...
}
// 深度不得超过两个的复合命名空间。
use Vendor\Package\SomeNamespace\{
    SubnamespaceOne\ClassA,
    SubnamespaceOne\ClassB,
    SubnamespaceTwo\ClassY,
    ClassZ,
};

// 下面的不行
<?php

use Vendor\Package\SomeNamespace\{
    SubnamespaceOne\AnotherNamespace\ClassA,
    SubnamespaceOne\ClassB,
    ClassZ,
};
<?php declare(strict_types=1) ?>
<html>
<body>
    <?php
        // ... additional PHP code ...
    ?>
</body>
</html>
declare(ticks=1) {
    // some code
}

太多了。。。 贴个链接,你们玩的开心。。。

https://www.php-fig.org/psr/psr-12/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值