ModernPHP读书笔记(二) ——PHP开发标准
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标准的日志
首先,不推荐自己去实现,除非是专门开发日志的开发组。
要实现日志,需要实现PsrLog路径下的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 MonologLogger;
use MonologHandlerStreamHandler;
//定义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
相关阅读:
PHP实用功能——modern PHP读书笔记(一)
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- Python中好用又高效的Collections 模块
- 正确创建Python二维数组
- 深入理解Python内存管理与垃圾回收,再也不怕问了(一)
- 走进面向“对象”编程的理想国(一)——深入理解Python中的一切皆对象
- 深入理解Python内存管理与垃圾回收,再也不怕问了(二)
- 如何利用Python实现二分查找(迭代和递归)
- 详解排序算法(Python实现)
- Python垃圾回收机制
- iOS 开发:『Crash 防护系统』(二)KVO 防护
- 学Java到底学什么
- Python 的魔法方法及用途
- 四件简单的事情,帮助改善部署过程
- 为什么 Python 程序中很少看到驼峰式的命名方式?
- GATK的FilterMutectCalls如何才能成功呢
- Python字典按键/值排序的几种方法