Modern PHP 学习笔记 二

标准

PSR是什么

PSR是PHP Standards Recommendation(PHP推荐标准)简称。

PSR-1:基本的代码风格

PHP标签

必须把PHP代码放在<?php ?>或<?= ?>标签中。不得使用其他PHP标签语法

编码

所有PHP文件必须使用UTF-8字符集编码,而且不能有字节顺序标记(Byte Order Mark BOM)

目的

一个PHP文件可以定义符号(类、性状、函数和常量等),或者执行有副作用的操作(例如,生成结果或处理数据)
,但不能同时做这两件事。

自动加载

PHP命名空间和类必须遵守PSR-4自动加载器标准

类的名称

PHP类的名称必须一直使用驼峰式(CamelCase)。这种格式也叫标题式(TitleCase)

常量的名称

PHP常量的名称必须全部使用大写字母。如果需要,可以使用下划线把单词分开

方法的名称

PHP方法的名称必须一直使用驼峰式。

PSR-2:严格的代码风格

缩进

推荐使用四个空格缩进

文件和代码行

PHP文件必须使用UNIX风格的换行符(LF),最后要有一个空行,而且不能使用PHP关闭标签?>。每行代码不能超过80个字符,
至少不能超过120个字符。每行末尾不能有空格。

关键字

推荐使用小写字母的关键字

命名空间

每个命名空间声明语句后必须跟着一个空行。
示例:

1
2
3
4
5
6
7
8
9
10
11
<?php
namespace My\Component;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class App
{
//类的定义
}
?>

推荐类定义体的起始括号应该在类名之后新起一行写,结束括号在定义体之后新起一行

方法

方法的定义体的括号与类定义体的括号一致。方法的参数:起始圆括号和结束圆括号没有空格,每个参数(除最后一个)后面有一个逗号和空格

可见性

类中的每个属性和方法都要声明可见性。可见性由public、protected或private指定,其作用是决定在类的内部和外部访问属性和方法。传统的PHP开发者可能习惯在类的属性前加上var关键字,在私有方法的名称前加上下划线。别那么做,我们应该使用前面列出的可见性关键字。如果把类属性或方法声明未abstract或final,这两个限定字符必须放在可见性关键字之前。如果把属性或方法声明为static,这个限定符必须放在可见性关键字之后

控制结构

所有控制结构关键字后面都要有一个空格。控制结构关键字包括:if,elseif,else,switch,case,while,do while,for,foreach,try和catch。如果控制结构关键字后面有一对圆括号,起始圆括号后面和结束圆括号之前不能有空格。控制结构关键字后面的起始括号应该和关键字同行。结束括号单独一行

PSR-3:日志记录器接口

日志记录器组件:monolog/monolog(https://packagist.org/packages/monolog/monolog)

PSR-3接口复用了RFC 5424系统日志协议(http://tools.ietf.org/html/rfc5424)

规定要实现九个方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
namespace Psr\Log
interface LoggerInterface
{
public function emergency($message, array $context = array());
public function alert($message, array $context = array());
public function critical($message, array $context = array());
public function error($message, array $context = array());
public function warning($message, array $context = array());
public function notice($message, array $context = array());
public function info($message, array $context = array());
public function debug($message, array $context = array());
public function log($level, $messsage, array $context = array());
}
?>

第一个参数必须是一个字符串,或者十一个有__toString()方法的对象。第二个参数是可选,这是一个数组,提供用于替换第一个参数中占位标记的值。

PSR-4:自动加载

把命名空间的前缀和文件系统中的目录对应起来。