天津免费建站,简单的logo设计,wordpress文库管理系统,网站开发工作进展情况From: http://www.shuchengxian.com/article/128.html
PHP的PSR推荐规范,PSR-1,PSR-2,PSR-3,PSR-4详解
PSR是php standards recommendation(php推荐标准)的简称。PHP-FIG制定了每个推荐的规范用于解决大多数php框架经常会遇到的某个具体问题。php框架无需频繁解决相同的问题他们可以遵守PHP-FIG制定的推荐规范使用共用的方案来解决。
目前位置PHP-FIG共发布了5个推荐标准。 PSR-1基本的代码风格 PSR-2严格的代码风格 PSR-3日志记录器接口 PSR-4自动加载 注意在这里你可能发现只有四个推荐标准可是前面你说是五个标准。PHP-FIG废弃了第一份推荐规范PSR-0。第一份推荐标准被新发布的PSR-4替代了。
PSR-1基本的代码风格
PHP标签 必须把php代码放在?php ?或? ?标签中。不得使用其他的PHP标签语法。
编码 所有PHP文件都必须使用UTF-8字符集编码。
目的 一个PHP文件可以定义符号(类、性状、函数和常量等)或者执行有副作用的操作(例如生成结果或者处理数据)但不能呢个同时做这两件事。这是一个简单的要求我们只需要深谋远虑一点。
自动加载 PHP命名空间和类必须遵守PSR-4自动加载器标准。
类的名称 PHP类的名称使用驼峰式。
常量的名称 PHP常量的名称必须全部使用大写。
方法的名称 PHP方法的名称必须一直使用驼峰式。
PSR-2严格的代码风格
在使用PSR-2推荐规范的前提是必须遵守PSR-1推荐规范。 缩进 PSR-2推荐规范要求PHP代码使用4个空格缩进。 因为在不同的编辑器中空格的渲染效果基本一致的但是制表符却不一致。
文件和代码行 PHP文件必须使用UNIX风格的换行符最后要有一个空行而且不能使用PHP关闭标签?。每行代码不能超过80个字符至少不能超过120字符。每行的末尾不能有空格。 为什么PHP文件不使用?关闭标签 因为我们不写关闭标签这样能避免意外的输出错误。如果加上关闭标签?而且在关闭标签的后面出现空行那么这个空行会被当成输出导致出错。
关键字 PSR-2推荐规范要求PHP关键字都应该使用小写字母。
命名空间 每个命名空间声明语句后必须跟着一个空行。
类 类定义的结束括号必须在定义体之后新起一行写。如果扩展其他类或实现接口extends和implements关键字必须和类名写在同一行。 ?phpnamespace my\appclass Admin extends User{// 类的定义体} 方法 方法定义体的括号位置和类定义体的括号位置一样方法定义体的起始括号要在方法名之后新起一行写方法定义体的结束括号要在定义体之后新起一行写。要特别注意方法的参数起始圆括号之后没有空格结束括号之前也没有空格。方法的每个参数(除了最后一个)后面有一个逗号和空格。 ?phpnamespace my\appclass Admin extends User{public function AdminLogin($num1, $nameabc){// 方法的定义体 }}
可见性 类中的每个属性和方法都要声明可见性。可见性由public,protected或private指定其作用是决定在类的内部和外部访问属性和方法。如果把类属性和方法声明为abstract和final这两个限定符必须放在可见性关键字之前。如果把属性或方法声明为static这个限定符必须放在可见性关键字之后。 ?phpnamespace my\appclass Admin{public static $name 1;public function __construct(){static::$name;}}
拓展 abstract是什么怎么使用? abstract是抽象的意思。 1、没有抽象方法的抽象类是没有意义的。 2、抽象方法在子类中必须重写。 3、抽象方法在类中此类必须声明为抽象类。 4、抽象类中不能重写父类的抽象方法。 final是什么怎么使用 final是最终的意思。 1、final类不可被继承。 2、final方法不可重写。 static是什么怎么使用 static是静态的意思。 1、类中 self::属性 self::方法。 2、子类 parent::属性 parent::方法。 3、外部 类名/子类名::属性 类名/子类名::方法
控制结构 所有的控制结构关键字的后面都要有一个空格。控制结构关键字包括if、elseif、else、switch、case、while、do while、for、foreach、try和catch。如果控制结构关键字后面有一对圆括号起始圆括号后面不能有空格结束圆括号之前不能有空格。与类和方法的定义体不同控制结构关键字后面的起始括号应该和控制结构关键字写在同一行。控制结构关键字后面的结束括号必须单独的写一行。 ?phpif ($a10) {echo 小于10;} PSR-3日志记录器接口 PHP-FIG规定的日志记录器其实就是一个接口。PSR-3说接口复用了RFC 5424系统日志协议。 如果你正在准备自己开发日志记录器的话可以你就别在浪费时间了。因为有个成熟的Monklog组件完全可以实现PSR-3接口而且便于使用自定义的消息格式化程序和处理程序扩展功能。 Monolog的消息处理程序可以把日志消息写入文本文件系统日志和数据库能通过电子邮件发送还能传给HipChat、Slack、网络中的服务器和远程API。只要你能想到的日志处理方式Monolog几乎提供了。如果Monolog没有你需要的处理程序你也可以自己编写程序并将其集成到Monolog中。 示例:将日志消息写入文本文件中。
?phpuse Monolog\Logger;
use Monolog\Handler\StreamHandler;// 准备日志记录器
$log new Logger(name);
$log-pushHandler(new StreamHandler(path/warning.log, Logger::WARNING));
$log-pushHandler(new StreamHandler(path/debug.log, Logger::DEBUG));// 使用日志记录器
$log-debug(yes);
$log-warning(yes);
如果想更深的了解那么就可以看看博客中《PHP日志记录器Monolog日志记录工具》这篇文章。 PSR-4自动加载器
PHP-FIG发布的第四个推荐规范就是描述一个标准的自动加载器。自动加载器的策略就是依赖PHP命名空间和文件系统目录结构查找并加载PHP类、接口和性状。 那么如何去编写PSR-4规范的自动加载器呢。
?phpsql_auto_register(function ($class)) {// 命名空间的前缀$prefix mysqlapp; // 这个命名空间对应的基目录$base_dir __DIR__./src/; // 获取传入的类名是否使用的是这个命名空间前缀$len strlen($prefix); // 不使用交给注册的下一个自动加载器处理if (strncmp($class,$prefix,$len) ! 0) { return;}// 获取去掉前缀后的类名$relative_class substr($class,$len); // 把命名空间前缀换成基目录将命名空间的分隔符替换成目录分隔符然后加上.php文件的后缀。$file $base_dir . str_replace(\\,/,$relative_class)..php; // 如果文件存在将其导入。if (file_exitst($file)) {require $file;} }
这段代码就是可用的PSR-4自动加载器了。如果你想自己编写自动加载器那么请你停下来因为我们可以使用依赖管理器composer自动生成PSR-4自动加载器。
总结 目前位置PHP的PSR推荐规范以及对PSR-1,PSR-2,PSR-3,PSR-4的详解就到此为止希望对你有所帮助。 ×作者高蒙 地址http://www.shuchengxian.com/article/128.html 声明除非本文有注明出处否则转载请注明本文来自 个人博客 备注相关侵权、举报、投诉及建议等请发E-mail936594075#qq.com(#替换成)。