php psr2规范,php标准规范详解

本文主要和大家分享php标准规范详解,希望能帮助到大家。

psr0:自动加载标准已经被 psr4 替代,可以了解下

1. 强制:完全限定命名空间和类的格式:\\(\)*

2. 强制:每个命名空间必须有一个顶级命名空间 (Vendor Name)。

3. 每个命名空间中可以含有任意数量的子命名空间。

4. 当文件系统加载源文件时,命名空间之间的分隔符将被转换为 DIRECTORY_SEPARATOR。

5. 类名中的下划线 _ 都将被转换为 DIRECTORY_SEPARATOR。_ 没有什么特殊的意义。

6. 完全限定命名空间和类从文件系统加载源文件时将会加上 .php 后缀。

7. 完全限定命名空间中的字母大小写可以是任何组合。

实例\Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php

\Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php

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

\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

psr1:基本编程规范

强制:php 标签必须是 <?php ?> 或者 = ?>2. 强制:文件必须以 不带BOM的 UTF-8 编码3. php 文件中的代码只能是定义类、函数、常量等声明,或者只能是一些副操作4. 命名空间和类必须满足 psr0 或者 psr45. 类名必须是 StudlyCaps 【大写开头的驼峰命名】规范6. 类中常量所有字母必须大写,下划线分隔7. 方法名称必须是 camelCase 驼峰命名规范。

解释副操作包含却不仅限于:生成输出、直接的 require 或 include、连接外部服务、

修改 ini 配置、抛出错误或异常、修改全局或静态变量、读或写文件等。<?php // side effect: change ini settingsini_set('error_reporting', E_ALL);// side effect: loads a fileinclude "file.php";// side effect: generates outputecho "\n";// declarationfunction foo(){

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

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

{

// function body

}

}

psr2 编程风格规范

是 psr1 的拓展

1. 必须遵循 psr12. 缩进必须使用 4 个空格符3. 每行的字符数应该软性保持在80个之内, 理论上一定不可多于120个, 但一定不能有硬性限制。4. 每命名空间声明语句和 use 声明语句块后面,必须插入一个空白行。所有 use 必须在 namespace 后声明。5. 方法和类的开始花括号必须写在其声明后另起一行。6. abstract 以及 final 必须在修饰符 private、protected 以及 public 之前,而 static 必须声明在访问修饰符之后。7. 控制结构的关键字后必须要有一个空格符,而调用方法或函数时则一定不能有。8. 控制结构的开始花括号必须写在声明的同一行。9. 控制结构的开始左括号后和结束右括号前,都一定不能有空格符。10. 所有PHP文件必须使用 Unix LF 作为行的结束符。

11. 所有PHP文件必须以一个空白行作为结束。12. 非空行后一定不能有多余的空格符。13. 每行一定不能存在多于一条语句。14. PHP所有 关键字必须全部小写。

实例<?phpnamespace 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

}

}

psr4 自动加载

\(\)*\

注意: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

\Aura\Web\Response\StatusAura\Web/path/to/aura-web/src//path/to/aura-web/src/Response/Status.php

\Symfony\Core\RequestSymfony\Core./vendor/Symfony/Core/./vendor/Symfony/Core/Request.php

\Zend\AclZend/usr/includes/Zend//usr/includes/Zend/Acl.php

相关推荐:

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值