前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ModernPHP读书笔记(二) ——PHP开发标准

ModernPHP读书笔记(二) ——PHP开发标准

作者头像
用户1327360
发布2018-03-07 13:56:14
7870
发布2018-03-07 13:56:14
举报
文章被收录于专栏:决胜机器学习决胜机器学习

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、方法的大括号另起一行,圆括号内的参数每个逗号后面都有一个空格,但开始和结尾无空格。例如:

代码语言:javascript
复制
         functiontestFunction($val1, $val2, $val3)//圆括号内第一个$前面和数字3后面没有空格
         {
                   //….
         }

5、类名、性状大括号另起一行(同方法),extends、implements同一行。例如:

代码语言:javascript
复制
         classTestClass extends Test
         {
                   //…
         }

6、命名空间定义或导入的语句后面空一行。例如:

namespacetest

…….

7、属性或者方法都要加上可见性定义(public、private、protected),abstract、final放在可见性之前,static放置于可见性之后。

8、控制语句(如if、while)的大括号与命令同一行,中间有一个空格。例如:

代码语言:javascript
复制
         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()方法的对象,要求输入日志信息;第二个参数是可选参数,是一个数组,可以让第一个参数输入的内容进行占位符替换功能。

占位符举例:

代码语言:javascript
复制
$message = “uid{uid}-name{name}modified”;
$context =array(‘uid’=>1, ‘name’=>’test’);

2、monolog使用方法

Monolog简单易用,需要自定义功能也很好往里加。使用方式如下:

代码语言:javascript
复制
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实现自动加载器的示例:

代码语言:javascript
复制
         <?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

相关阅读:

PHP实用功能——modern PHP读书笔记(一)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 决胜机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PHP实用功能——modern PHP读书笔记(一)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档