PHP-FIG PSR-1 # 基本编码标准

本标准包含了 对 用于保障 PHP共享代码的互操作性 的标准编码元素。

The key words “MUST 必须”, “MUST NOT 必须不”, “REQUIRED 需要”, “SHALL 将要”, “SHALL NOT 将不”, “SHOULD 应该”, “SHOULD NOT不应该”, “RECOMMENDED 推荐的”, “MAY 可以”, and “OPTIONAL 可选的” in this document are to be interpreted as described in RFC 2119.

概览

  1. 文件 必须 使用 < ? php 和 < ? = 标签。
  2. 文件中的PHP代码 必须 使用无BOM头 UTF-8编码。
  3. 文件即可以声明“符号”(诸如 类、函数、常量等),也可做一些边际效应的事情 (诸如产生输出, 改变ini设置等.)。 但这两类事情不应出现在同一个文件里。
  4. 命名空间 和 类 必须遵循“autoloading” PSR: [PSR-0, PSR-4]
  5. 类名必须使用 StudlyCaps (首字母大写的驼峰)声明。
  6. 类常量必须使用下划线分割的大写字母。
  7. 方法名必须使用驼峰声明。

文件

PHP 标签

PHP 代码必须使用长标签 < ? php ?> 或 echo短标签 < ? = ? > ; 必须不能使用其他形态的标签.

字符编码

PHP代码必须使用无BOM头UTF-8编码

边际效应

一个文件 (应该)要么声明符号(类、函数和常量等),不能引起任何边际效应;要么执行产生边际效应的代码。这两种情况不能出现在一个文件中。
“边际效应” 执行与声明类、函数、常量无关的逻辑。

“边际效应” 包括但不限于: 生成输出, 显式的require或include, 连接外部服务, 修改ini配置, 发出 errors 或 exceptions, 修改全局或静态变量, 读写文件 等等.

以下是一个即声明符号,又产生边际效应的例子; 这是应该要避免的情况:

<?php
// 边际效应: 修改 ini 设置
ini_set(‘error_reporting‘, E_ALL);

// 边际效应: 加载文件
include "file.php";

// 边际效应: 生成输出
echo "<html>\n";

// 声明
function foo()
{
    // function body
}

以下例子只包含声明,无边际效应;值得效仿:

<?php
// declaration
function foo()
{
    // function body
}

// 条件式声明 不是边际效应
if (! function_exists(‘bar‘)) {
    function bar()
    {
        // function body
    }
}

命名空间名和类名

命名空间名和类名必须遵循 “autoloading” PSR: [PSR-0, PSR-4].

这意味着每个文件只能包含一个类, 并且至少有一层命名空间: 顶级的 vendor 名.

类名必须使用 StudlyCaps (首字母大写驼峰) 声明.

针对 PHP 5.3 及以后版本的代码,必须使用正式的命名空间(5.3之前PHP不支持namespace).

例如:

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

class Foo
{
}
Code written for 5.2.x and before SHOULD use the pseudo-namespacing convention of Vendor_prefixes on class names.

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

类常量、属性和方法

这里的“类”包括 classes, interfaces 和 traits.

4.1. 常量

类常量必须使用下划线分割的大写声明。


 <?php

namespace Vendor\Model;

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

属性

本指南特意避免偏向 StudlyCaps,camelCase 和 $under_score 中任意一种属性命名风格.

无论在用哪种命名风格,在合理的范围内均应改保持一致。 范围可以使 vendor-level, package-level, class-level, 或 method-level。

方法

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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。