本文主要和大家分享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

相关推荐:

php psr2规范,php标准规范详解相关推荐

  1. USB充电规范——BC1.2 中文详解

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/yangchao315/article/ ...

  2. 编译原理LR(0)项目集规范族的构造详解

    学编译原理的时候,感觉什么LL(1).LR(0).SLR(1).LALR(1)思想满天飞. 而且做题的时候,一不留意,一道题就写了三页纸了. 就拿今天这个玩意儿来讲,我真的是考试前花了最多的时间,搞懂 ...

  3. USB充电规范 1.2 中文详解

    1. Introduction 1.1 Scope 规范定义了设备通过USB端口充电的检测.控制和报告机制,这些机制是USB2.0规范的扩展,用于专用 充电器(DCP).主机(SDP).hub(SDP ...

  4. java 序列化规范_Java序列化格式详解

    RPC的世界,由于涉及到进程间网络远程通信,不可避免的需要将信息序列化后在网络间传送,序列化有两大流派: 文本和二进制. 文本序列化 序列化的实现有很多方式,在异构系统中最常用的就是定义成人类可读的文 ...

  5. 测试报告参考规范之软件测试环境详解

  6. go标准命令详解0.2 go install

    搬运自github赫林的go_command_tutorial,绝对干货,感谢作者. 0.2 go install 命令Go install用于编译并安装指定的代码包及它们的依赖包.当指定的代码包的依 ...

  7. go标准命令详解0.1 go build

    搬运自github赫林的go_command_tutorial,绝对干货,感谢作者. 为了让讲解更具关联性,也为了让读者能够更容易的理解这些命令和工具,本教程并不会按照这些命令的字典顺序讲解它们,而会 ...

  8. ANSI、C99、C11 标准区别详解

    一.ANSI C 标准 美国国家标准协会(ANSI)为创立 C 语言的一套标准,于 1989 年完成,因此常被称为 C89. 在 KEIL 中使用的是 ANSIC C 标准(C89 标准),定义变量一 ...

  9. MD5 标准算法详解

    1 简介 视频参考(本文参考视频中的例子) 目的: 将任意长度的明文,转化为128位的哈希值 例如将 123456 转化成 e10adc3949ba59abbe56e057f20f883e (16进制 ...

最新文章

  1. 数据库连接池,实现及分析
  2. python与excel结合能做什么-Python网络爬虫与文本数据分析
  3. WebService与使用风格RPC/SOA/REST
  4. 四川省天然气行业发展战略及投资形势分析报告2021版
  5. linux fork函数的精辟解说
  6. nzhtl1477-ただいま帰りました ( bfs )
  7. python xml
  8. 文献阅读 Fully Convolutional Networks for Semantic Segmentation
  9. Python中的条件判断和循环
  10. java-第三章-从键盘输入3个整数,然后将输入的整数按照从小到大的顺序放在abc,并输出3个变量的值...
  11. 计算机网络比特是什么,计算机网络
  12. 九、SpringBoot——默认错误页面错误页面定制
  13. Python pip卸载包
  14. 超声非线性成像-谐波成像基本知识
  15. 程序员内部培训与个人发展杂谈
  16. 深入理解高级数据结构之红黑树
  17. 学信网忘记原手机号码的解决办法
  18. PJSIP视频通话客户端
  19. Android uiautomatorviewer无法启动
  20. 科创板拟上市企业申联生物和传音控股已提交注册

热门文章

  1. torch 变量_python变量
  2. 小程序中实现滚动字幕
  3. 垂直margin合并问题
  4. windown下linux子系统的安装和卸载
  5. 【Windows 10 应用开发】使用快捷访问键
  6. Codeforces 777E:Hanoi Factory(贪心+栈)
  7. MAX_DEPTH, MAX_ROUTERS and MAX_CHILDREN
  8. socket网络间通信初识
  9. C# 深入浅出 委托与事件
  10. iphone开发中的一些小技