PSR-1:PHP基本编码规范

本规范制定了代码基本元素的相关标准,以确保共享的PHP代码间具有较高程度的技术互通性。

本文档中的关键词”必须(MUST)”,”禁止(MUST NOT)”,”必须(REQUIRED)”,”必须(SHALL)”,”禁止(SHALL NOT)”,”SHOULD(应该)”,“不应该(SHOULD NOT)”, “建议(RECOMMENDED)”, “可能(MAY)”和 “可选(OPTIONAL)” 遵循RFC2119约定。

1、概览

  • 文件 必须 只能用<?php和<?=标签。
  • 文件 必须 只能使用UTF-8(无BOM)编码格式。
  • PHP代码中 应该 只定义类、函数、常量等声明,或其他会产生 副作用 的操作(如:生成文件输出以及修改 .ini 配置文件等),二者只能选其一;
  • 命名空间以及类 必须 符合 PSR 的自动加载规范:PSR-0,PSR-4 中一个;
  • 类名称必须使用大驼峰(StudlyCaps)。
  • 类常量必须全部大写,用下划线分割。
  • 方法名必须使用小驼峰(camelCase)。

2. 文件

2.1、 PHP标签

PHP代码必须使用<?php ?>或者<?= ?>标签;禁止使用其他变形标签。

2.2、编码格式

PHP代码必须使用UTF-8(无BOM)编码格式。

2.3、副作用(Side Effects)

一个文件应该 只定义类、函数、常量等声明并且不会引起其他副作用,或者应该执行逻辑,但是只能二选一。
“副作用(Side Effects)”这个词指可执行的逻辑,而非直接声明类、函数、常量等,只是在include file的情况下。
“副作用(Side Effects)”包括但不限于:产生输出,显式使用requiredinclude,链接外部服务,修改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 "\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
    }
}

3、命名空间和类名称

命名空间以及类 必须 符合 PSR 的自动加载规范:PSR-0,PSR-4 中的一个。

这意味着每个类独立一个文件,并且必须处在一个命名空间下:一个顶层vendor下。

类名称必须使用大驼峰(StudlyCaps)。

PHP5.3之后版本书写的代码必须使用标准命名空间。

例如:

<?php
// PHP 5.3 and later:
namespace Vendor\Model;

class Foo
{
}

5.2.x之前的版本书写的代码应该使用在类名中用下划线的伪命名约定Vendor_

<?php
// PHP 5.2.x and earlier:
class Vendor_Model_Foo
{
}

4、类常量、属性以及方法

此处“类”(class)反之所有的classes, interfaces和traits。

4.1、类常量

类常量必须全部大写并使用下划线分开。例如:

<?php 
namespace Vendor\Model;

class Foo
{
    const VERSION = '1.0';
    const DATE_APPROVED = '2012-06-01';
}

4.2、属性

本规范对使用$StudlyCaps,$camelCase或者$under_score作为属性名故意不做任何建议。
使用任何命名约定在一个合理范围内应该保持一致。范围应该是vendor级别,package级别,class级别或者method级别。

4.3、方法

方法名必须使用小驼峰(camelCase)。

职位要求: 
具备良好的编程习惯,熟练掌握OOP编程和常见设计模式;
良好的编程风格和项目文档编写习惯

发表评论

电子邮件地址不会被公开。 必填项已用*标注