ModernPHP读书笔记(二)
——PHP开发标准
(原创内容,转载请注明来源,谢谢)
本文主要讲述PHP-FIG(PHP FrameworkInteroperability Group(PHP框架可互用性小组))发布的四套开发标准,该标准主要目的是为了让各类PHP框架相互兼容,降低PHP开发人员的学习难度,让致力于框架研发改造的开发者可以集中精力于开发,而不在于学习新的框架。我个人也曾忙于学习各框架的实现过程,而仿佛落入大海中,忽略了框架的内核与中心。如果该标准推广,所有框架的基本形式均相同,会非常易于快速上手,并致力于研究框架本身,而不是各类语法。因此,我很喜欢该标准。
一、目的
制定标准的主要目的在于:
1、通过让各框架实现接口,实现面向接口编程;
2、各框架采用相同的自动加载机制;
3、框架间通过标准的代码风格合作。
二、规范
PHP-FIG共制定五套规范,编号PSR-0~PSR-4,但是PSR-0已经被PSR-4取代,因此已经废弃,故讨论的规范通常只讨论四套规范。
四套规范分别是:
1、PSR-1 (BasicCoding Standard) 基础编码标准
2、PSR-2(Coding Style Guide) 编码风格向导
3、PSR-3(Logger Interface) 日志记录器接口
4、PSR-4(Autoloading Standard) 自动加载标准
三、PSR-1
PSR-1主要定义一些最基础的编码规范,如下。
1、PHP代码应放置于<?php?>或<?= ?>之中。
2、所有PHP文件采用UTF-8编码,不采用字节顺序标记编码(BOM)。
3、一个PHP文件仅实现一个功能,可以是类、性状(trait)、常量等。
4、命名空间遵循PSR-4。
5、类名采用首字母大写的驼峰式(CamelCase),方法名采用首字母小写的驼峰式(camelCase),常量全部大写并可用下划线分割(例如CONST_TRUE)。
四、PSR-2
PSR-2较PSR-1有更严格的规定。
1、要求完全贯彻PSR-1。
2、缩进采用四个空格,而不是tab制表符,防止各文本编辑器的解码不同导致错位。
3、换行采用UNIX风格换行符,每行不超过80个字符,行尾不留空格,不采用?>标签作为文件的结尾。(不采用?>标签,是为了防止如果在标签后不慎输入空格或者回车等字符,会发生异常情况。)
4、方法的大括号另起一行,圆括号内的参数每个逗号后面都有一个空格,但开始和结尾无空格。例如:
functiontestFunction($val1, $val2, $val3)//圆括号内第一个$前面和数字3后面没有空格
{
//….
}
5、类名、性状大括号另起一行(同方法),extends、implements同一行。例如:
classTestClass extends Test
{
//…
}
6、命名空间定义或导入的语句后面空一行。例如:
namespacetest
…….
7、属性或者方法都要加上可见性定义(public、private、protected),abstract、final放在可见性之前,static放置于可见性之后。
8、控制语句(如if、while)的大括号与命令同一行,中间有一个空格。例如:
if($x==1) {
//….
}
五、PSR-3
PSR-3定义了一组对象,称之为日志记录器。符合此标准的框架,对于日志的记录给出一个接口,但不实现,允许开发者找自己喜欢的第三方日志记录组件使用。推荐使用第三方组件monolog。
1、实现符合PSR-3标准的日志
首先,不推荐自己去实现,除非是专门开发日志的开发组。
要实现日志,需要实现Psr\Log路径下的LoggerInterface接口,该接口定义了9个方法,分别用来记录RFC5424中定义的9个等级的日志:debug、info、notice、warning、error、critical、alert、emergency、log。
每个方法允许输入两个参数,第一个参数是必须的参数,是一个字符串或者一个__toString()方法的对象,要求输入日志信息;第二个参数是可选参数,是一个数组,可以让第一个参数输入的内容进行占位符替换功能。
占位符举例:
$message = “uid{uid}-name{name}modified”;
$context =array(‘uid’=>1, ‘name’=>’test’);
2、monolog使用方法
Monolog简单易用,需要自定义功能也很好往里加。使用方式如下:
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
//定义Logger实例
$log = new Logger('dbLoger');//定义名称
$log->pushHandler(new StreamHandler('path/logname.log',Logger::WARNING));
// 记录信息
$log->addWarning('Duplicated id');
$log->addError('Connection failed');
六、PSR-4
PSR-4为自动加载器,是指PHP运行时根据实际需要动态查找PHP的类、接口或者性状,并进行加载。通俗来说即动态调用include、require。
PSR-4自动加载的策略,是依赖命名空间的前缀和相对应的文件系统的路径,这两部分内容都可以自定义。
另外,可以采用Composer组件引入加载器,后续文章中会进行描写。
PHP实现自动加载器的示例:
<?php
spl_autoload_register(function($class){
$pre= 'Linhxx\\Test\\';
$base= __DIR__.'/src/';
$len= strlen($pre);
if(strncmp($pre,$base, $len) != 0){
return;
}
$autoloadClass= substr($class, $len);
$file= $base.str_replace('\\', '/', $autoloadClass).'php';
if($file_exists($file)){
require$file;
}else{
echo'无'.$base.str_replace('\\', '/', $autoloadClass).'php文件,请检查是否路径有误';
returnfalse;
}
});
——written by linhxx 2017.06.30
相关阅读: