PHP的PSR推荐规范,PSR-1,PSR-2,PSR-3,PSR-4详解

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($num=1, $name='abc'){// 方法的定义体   }}


可见性:
     类中的每个属性和方法都要声明可见性。可见性由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 ($a>10) {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-mail:936594075#qq.com(#替换成@)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

原生JavaScript第一篇

js的历史 在上个世纪的1995年&#xff0c;当时的网景公司正凭借其Navigator浏览器成为Web时代开启时最著名的第一代互联网公司。 由于网景公司希望能在静态HTML页面上添加一些动态效果&#xff0c;于是叫Brendan Eich这哥们在两周之内设计出了JavaScript语言。你没看错&#xf…

The Best Way to Unit Test in Android

http://simpleprogrammer.com/2010/07/27/the-best-way-to-unit-test-in-android/ http://simpleprogrammer.com/2010/07/29/the-best-way-to-unit-test-in-android-part-2/大概的思想非常简单&#xff0c;就是将activity做thin&#xff0c;通过提供Presenter与业务逻辑洽接。这…

PSR-2 代码风格规范

From: https://blog.csdn.net/qq_28602957/article/details/52248239 这篇规范是PSR-1&#xff08;基本代码规范&#xff09;的扩展和继承。 本规通过制定一系列规范化PHP代码的规则&#xff0c;以减少在浏览不同作者的代码时&#xff0c;因代码风格的不同而造成不便。 这个…

API的非向后兼容性无论如何通常代表着一种比较差的设计

不管一个类库或者工具方法实现多么的好&#xff0c;如果无法做到向后兼容性&#xff0c;通常会给用户带来很大的升级成本&#xff0c;很多对此的依赖如果希望在后续的升级和维护期间使用该类库的其他新增特性或者好处&#xff0c;将不得不推迟升级亦或是被迫接受改变。 无论这个…

学习《css世界》笔记之使用css实现凹凸效果

显示效果 HTML <span class"ao"></span> <span class"tu"></span>CSS .ao,.tu{display: inline-block;width: 0;font-size: 14px;line-height: 18px;margin: 35px;/* color: #fff; *//* 文字颜色 */}.ao:before,/* :before的主…

第二届河南省大学生程序设计竞赛 Dr.Kong的机器人

Dr.Kong的机器人Dr.Kong设计了一个可以前进或后退机器人&#xff0c;该机器人在每个位置i会得到一个移动步数的指令Ki (i1,2„N),聪明的机器人自己会判断是要前进Ki步还是后退Ki步。例如&#xff1a;给定指令序列(3 3 1 2 5)&#xff0c;表示机器人在第1个位置时&#xff0c;可…

PHP操作Redis常用技巧

From: http://www.php.cn/php-weizijiaocheng-395387.html 这篇文章主要介绍了PHP操作Redis常用技巧,结合实例形式总结分析了php针对redis的连接、认证、string、hash等操作技巧与注意事项,需要的朋友可以参考下 本文实例讲述了PHP操作Redis常用技巧。分享给大家供大家参考&am…

IO调度算法

IO调度算法的选择 一) I/O调度程序的总结 1) 当向设备写入数据块或是从设备读出数据块时,请求都被安置在一个队列中等待完成. 2) 每个块设备都有它自己的队列. 3) I/O调度程序负责维护这些队列的顺序,以更有效地利用介质.I/O调度程序将无序的I/O操作变为有序的I/O操作. 4) 内核…

ORA-01555 原因与解决

ORA-01555 原因与解决&#xff1a; 前面提到了ORA-01555错误&#xff0c;那么现在来看一下ORA-01555错误是怎样产生的。由于回滚段是循环使用的&#xff0c;当事务提交以后&#xff0c;该事务占用的回滚段事务会被标记为非活动&#xff0c;回滚段空间可以被覆盖重用。那么一个问…

使用css优雅解决文字两端对齐的方式之一

效果图 HTML <body><div>学校</div><div>班级</div><div>班主任</div><div>上课时间</div><div>名字</div></body>CSS div {margin: 10px 0;width: 70px;border: 1px solid brown;text-align: just…

centos7 下安装Poco

参考&#xff1a; https://pocoproject.org/download.html 以下是我自己安装时的步骤&#xff0c;亲自实践&#xff01; 1. 下载 git clone -b master https://github.com/pocoproject/poco.git 2. 安装依赖包 切换至root用户 yum install mysql mysql-devel mysql # 我…

DPlist

DP大法&#xff08;之POJ&#xff09;&#xff1a; [1]POJ 动态规划题目列表 http://cippus.dlut.edu.cn/forum/posts/list/45.page容易&#xff1a; 1018,1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 1322, 1414, 1456, 1458, 1609, 1644, 1664…

学习《css世界》笔记之loading三点动画效果

动画实例 HTML <div>正在加载中<span>...</span></div>CSS span {display: inline-block;height: 1em;line-height: 1;text-align: left;vertical-align: -0.25em;/* 属性设置元素的垂直对齐方式。指定为负长度&#xff0c;可以使元素降低 */overfl…

关于今天

今天天气晴朗,晴空万里,万里无云,哈哈... 早上起来的时候,大雾,妖风四起. 然后早上起来居然就玩了一天的 冰封要塞. 说说玩了后的心得吧. 推塔游戏,额,这是CF第一次推出的这种模式.可以说和dota和英雄联盟有些相似.估计是某人从dota和英雄联盟这么火的情况下想出来的这招. 推塔…

Mac下安装event库

因为使用的GatewayWorker框架使用了swoole&#xff0c;但swoole依赖于event&#xff0c;所以必须安装下event扩展&#xff01; 1. 最初使用brew install libevent安装了下&#xff0c;运行gatewayworker发现错误依然存在&#xff01; 2. 考虑到是php里使用event&#xff0c;所…

Road Construction

【题目描述】 某岛屿上有N个旅游景点&#xff0c;任意两个旅游景点之间能够连通&#xff0c;但道路部门正在对某条道路进行施工&#xff0c;禁止游客通行&#xff0c;为了使所有旅游景点依然能够正常开放&#xff0c;道路部门决定搭建一些临时桥梁&#xff0c;使得无论哪条道路…

学习《css世界》笔记之content自动添加开启闭合符号

实例 HTML <p lang"zh"><q>啦啦德玛西亚</q></p><p lang"en"><q>This book is very good!</q></p><p lang"no"><q>denne bog er fantasisk!</q></p><p class"…

Sybase用户登录以后的自动运行脚本

最近开始学习sybase&#xff0c;对学习过程中遇到的问题会在此做以记录&#xff0c;希望和大家共同来学习。 sybase&#xff08;ASE&#xff09;在用户登录之后可以指定自动运行一个脚本&#xff0c;执行指定的操作。一般为自定义的存储过程。 15.7之前的版本采用 添加&#xf…

php自动加载指定目录下的类文件

From: https://www.cnblogs.com/CpNice/p/4369399.html 网上找到的类&#xff0c;非常有用&#xff0c;文件名: autoload.php <?php /*** Created by PhpStorm.* User: zcm* Mail: zhouciming163.com* Date: 2018/10/10 上午10:20*/if(!defined(ROOTDIR)) {define(ROOTDI…

maven+jetty项目在tomcat部署

步骤1&#xff1a;项目打包 clean install 步骤二&#xff1a;拷贝war 包到tomcat下 步骤三&#xff1a;修改server.xml文件的端口 步骤四&#xff1a;启动tomcat,注意jetty的项目是不需要带项目名的&#xff0c;Tomcat的项目需要加上项目名。 温馨提示&#xff0c;在启动tomca…