在说啥是PSR-[0-4]规范的以前,我以为咱们有必要说下它的发明者和规范者:PHP-FIG。就是这个联盟组织发明和创造了PSR-[0-4]规范php
FIG 是 Framework Interoperability Group(框架可互用性小组)的缩写,由几位开源框架的开发者成立于
2009 年,从那开始也选取了不少其余成员进来,虽然不是 “官方” 组织,但也表明了社区中不小的一块。
项目的目的在于:经过框架做者或者框架的表明之间讨论,以最低程度的限制,制定一个协做标准,各个框架遵循统一的编码规范,避免各家自行发展的风格阻碍了
PHP 的发展,解决这个程序设计师由来已久的困扰。目前已表决经过了 6 套标准,已经获得大部分 PHP 框架的支持和承认。html
1 基础编码规范 PSR-1
2 编码风格规范 PSR-2
3 日志接口规范 PSR-3
4 自动加载规范 PSR-4
6 缓存接口规范 PSR-6
7 HTTP 消息接口规范laravel
<?php
或 <?=
标签开始;PHP代码中 应该 只定义类、函数、常量等声明,或其余会产生 反作用 的操做(如:生成文件输出以及修改 .ini配置文件等),两者只能选其一;git
「反作用」(side effects) 一词的意思是,仅仅经过包含文件,不直接声明类、函数和常量等,而执行的逻辑操做。
「反作用」包含却不只限于:github
- 生成输出
- 直接的 require 或 include
- 链接外部服务
- 修改 ini 配置
- 抛出错误或异常
- 修改全局或静态变量
- 读或写文件等
如下是一个 反例,一份包含「函数声明」以及产生「反作用」的代码:缓存
<?php // 「反作用」:修改 ini 配置 ini_set('error_reporting', E_ALL); // 「反作用」:引入文件 include "file.php"; // 「反作用」:生成输出 echo "<html>\n"; // 声明函数 function foo() { // 函数主体部分 }
下面是一个仅包含声明的示例文件;即应提倡的例子:框架
<?php // 声明 function foo() { // 函数体 } // 条件式声明不算作是反作用 if (! function_exists('bar')) { function bar() { // 函数体 } }
类的命名必须 遵循 StudlyCaps
大写开头的驼峰命名规范;ide
类的属性命名 能够 遵循:函数
- 大写开头的驼峰式 ($StudlyCaps)
- 小写开头的驼峰式 ($camelCase)
- 下划线分隔式 ($under_score)
本规范不作强制要求,但不管遵循哪一种命名方式,都 应该 在必定的范围内保持一致。这个范围能够是整个团队、整个包、整个类或整个方法。ui
类中的常量全部字母都 必须 大写,单词间用下划线分隔;
<?php namespace Vendor\Model; class Foo { const VERSION = '1.0'; const DATE_APPROVED = '2012-06-01'; }
camelCase
式的小写开头驼峰命名规范。方法(method)的左花括号必须放到其声明下面自成一行,右花括号则必须放到方法主体的下一行。
<?php namespace Vendor\Package; use FooInterface; use BarClass as Bar; use OtherVendor\OtherPackage\BazClass; class Foo extends Bar implements FooInterface { public function sampleFunction($a, $b = null) { if ($a === $b) { bar(); } elseif ($a > $b) { $foo->bar($arg1); } else { BazClass::bar($arg2, $arg3); } } final public static function bar() { // 方法主体 } }
全部的属性(property)和方法(method)必须有可见性声明;抽象(abstract)和终结(final)声明必须在可见性声明以前;而静态(static)声明必须在可见性声明以后。
<?php namespace Vendor\Package; abstract class ClassName { protected static $foo; abstract protected function zim(); final public static function bar() { // 方法主体部分 } }
控制结构的左括号以后不可有空格,右括号以前也不可有空格。
<?php if ($expr1) { // if body } elseif ($expr2) { // elseif body } else { // else body; }