标准的这一部分包括应该被认为是确保共享PHP代码之间高度技术互操作性所需的标准编码元素。
本文件中的关键词“必须”,“不得”,“必须”,“应该”,“不应该”,“应该”,“不应该”,“推荐”,“可以”和“可选”按照RFC 2119中的描述进行解释。
文件必须只使用<?php
和<?=
标签。
对于PHP代码,文件必须仅使用没有BOM的UTF-8。
文件应该任一声明的符号(类,函数,常量等) 或引起副作用(例如产生的输出,修改的.ini设置,等等),但是不应该这样做既。
类名必须声明StudlyCaps
。
类常量必须以全部大写形式用下划线分隔符声明。
必须声明方法名称camelCase
。
PHP代码必须使用长标签或短回声标签; 它不能使用其他标签变体。<?php ?>
<?= ?>
PHP代码必须只使用没有BOM的UTF-8。
一个文件应该声明新的符号(类,函数,常量等)并且不会引起其他副作用,或者它应该执行带副作用的逻辑,但是不应该同时执行这两个操作。
短语“副作用”意味着仅仅通过包括文件来执行与声明类,函数,常量等不直接相关的逻辑。
“副作用”包括但不限于:生成输出,显式使用require
或include
连接外部服务,修改ini设置,发出错误或异常,修改全局或静态变量,读取或写入文件等等。
以下是具有声明和副作用的文件示例; 即,要避免的一个例子:
<?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
// declaration
function foo()
{
// function body
}
// conditional declaration is *not* a side effect
if (! function_exists('bar')) {
function bar()
{
// function body
}
}
命名空间和类必须遵循“自动加载”PSR:[ PSR-0,PSR-4 ]。
这意味着每个类本身都在一个文件中,并且位于至少一个级别的命名空间中:顶级供应商名称。
类名必须声明StudlyCaps
。
为PHP 5.3编写的代码,必须使用正式的命名空间。
例如:
<?php
// PHP 5.3 and later:
namespace Vendor\Model;
class Foo
{
}
为5.2.x编写的代码,在SHOULD之前应该使用Vendor_
类名称前缀的伪命名约定。
<?php
// PHP 5.2.x and earlier:
class Vendor_Model_Foo
{
}
术语“类”指的是所有类,接口和特征。
类常量必须以全部大写形式用下划线分隔符声明。例如:
<?php
namespace Vendor\Model;
class Foo
{
const VERSION = '1.0';
const DATE_APPROVED = '2012-06-01';
}
本指南有意避免关于使用任何建议
$StudlyCaps
,$camelCase
或$under_score
属性名称。
无论使用何种命名约定,都应该在合理的范围内一致地应用。该范围可以是供应商级别,包级别,类级别或方法级别。
必须声明方法名称camelCase()
。