[TOC=2] ## 1. 概述 文件必须只使用 `<?php` 和 `<?= ` 标签。 对于 PHP 代码,文件必须仅使用没有 BOM 的 UTF-8。 * 文件应该任一声明的符号(类,函数,常量等)或引起副作用(例如产生的输出,修改的 .ini 设置等),但不应该一举两得。 * 命名空间和类必须遵循“自动加载”PSR:[ PSR-0, PSR-4 ]。 * 类名必须在声明中声明 `StudlyCaps`。 * 类常量必须以全部大写形式用下划线分隔符声明。 * 必须声明方法名称 `camelCase`。 ## 2. 文件 ### 2.1 PHP标签 PHP 代码必须使用长 `<?php ?>` 标签或短回声标签; 它不能使用其他标签变体。`<?= ?>` ### 2.2 字符编码 PHP 代码必须只使用没有 BOM 的 UTF-8。 ### 2.3 副作用 一个文件应该声明新的符号(类,函数,常量等)并且不会产生其他副作用,或者它应该执行带副作用的逻辑,但是不应该同时执行这两个操作。 短语“副作用”意味着仅仅通过包括 文件来执行与声明类,函数,常数等不直接相关的逻辑。 “副作用”包括但不限于:生成输出,显式使用 `require` 或 `include` 连接外部服务,修改 ini 设置,发出错误或异常,修改全局或静态变量,读取或写入文件等等。 以下是具有声明和副作用的文件示例; 即,要避免的一个例子: ~~~php <?php // side effect: change ini settings ini_set('error_reporting', E_ALL); // side effect: loads a file include "file.php"; // side effect: generates output echo "<html>\n"; // declaration function foo() { // function body } ~~~ 以下示例是包含没有 副作用的声明的文件; 即,模仿的例子: ~~~php <?php // declaration function foo() { // function body } // conditional declaration is *not* a side effect if (! function_exists('bar')) { function bar() { // function body } } ~~~ ## 3.命名空间和类名 命名空间和类必须遵循“自动加载”PSR:[ PSR-0,PSR-4 ]。 这意味着每个类本身都在一个文件中 ,并且位于至少一个级别的命名空间中:顶级供应商名称。 类名必须在声明中声明 `StudlyCaps`。 为 PHP 5.3 编写的代码,必须使用正式的命名空间。 例如: ~~~php <?php // PHP 5.3 and later: namespace Vendor\Model; class Foo { } ~~~ 代码 5.2.x 书面和前,应使用伪命名空间约定 的 Vendor_ 前缀上的类名。 ~~~php <?php // PHP 5.2.x and earlier: class Vendor_Model_Foo { } ~~~ ## 4.类常量,属性和方法 术语“class”指的是所有类,接口和特征。 ### 4.1 常量 类常量必须以全部大写形式用下划线分隔符声明。 例如: ~~~php <?php namespace Vendor\Model; class Foo { const VERSION = '1.0'; const DATE_APPROVED = '2012-06-01'; } ~~~ ### 4.2 属性 本指南有意避免关于使用任何建议 `$StudlyCaps` ,`$camelCase` 或 `$under_score` 属性名称。 无论使用何种命名约定,都应该在 合理的范围内始终如一地应用。该范围可以是供应商级别,包级别,类级别 或方法级别。 ### 4.3 方法 必须声明方法名称 `camelCase()`。