PHP开发规范整理

PHP开发规范整理

  在PHP的开发编码中,现行的规范主要由PHP FIG(Framework Interoperability Group )组织制定。目前表决通过了 6套标准,已经得到大部分PHP框架的支持和认可。

开源规范标准

基础编码规范

  1. PHP代码文件必须以不带BOM的UTF-8编码。

  2. PHP代码中应该只定义函数常亮等声明,或其他会产生副作用的操作(如:生成文件输出以及以及修改PHP的配置文件),二者只能选其一。

    
    <?php
    
    //副作用的反面示例
    
    init_set("error_reporting", E_ALL);
    
    include "somefileA.php";
    require "somefileB.php";
    
    function starcard()
    {
        echo "51starcard\n";
    }
    
    
    
    <?php
    
    //副作用的正面示例
    
    if (!function_exists("starcard")){
       function starcard()
       {
            echo "51starcard\n";
       }
    }
    
    if (!function_exists("jht")){
        function jht()
        {
            echo "jht\n";
        }
    }
    
    
  3. 类的命名必须遵循大写开头的驼峰命名规范。

  4. 类中的常量所有字母都必须大写,单词用下划线分隔。

  5. 方法名称必须遵循小写开头的驼峰命名规范。

    
    <?php
    
    class ClassExampleA
    {
        const CONST_EXAMPLE = "const_example";
    
        public exampleMethod()
        {
            echo "example method\n";
        }
    }
    
    
  6. 代码必须使用4个空格符,而不是TAB键进行缩进。

  7. 每行代码不该超过80个字符,大于80个字符的应该折成多行,非空行后一定不能有多余的空格,每行一定不能有多条语句。

  8. PHP所有的关键字必须全部小写,常量truefalsenull也必须小写。

    
    <?php
    
    //true, false, null, abstract, private, public...
    return false;
    
    
  9. 每个namespace名称空间声明语句和use语句块后面,必须插入一个空白行

  10. 所有的use必须在namespace后声明,每条use声明语句必须只有1个use关键字

    
    <?php
    
    namespace Istar\Example;
    
    use Istar\DemoA;
    use Istar\DemoB;
    
    class DemoC
    {
    
    }
    
    
  11. 类的开始花括号必须独占一行,结束花括号也必须在类主体后独占一行

  12. 关键字extends和implements必须写在类名称的同一行,若implements列表分成多行,则每个接口名必须独立成行。

    
    <?php
    
    namespace Istar\Package;
    
    use FooClass;
    use BarClass as Bar;
    
    class ClassA extends ParentClass implements \ArrayAccess, \Countable
    {
    
    }
    
    class ClassB extends ParentClass implements
        \ArrayClass,
        \Countable
    {
    
    }
    
    
  13. 方法的开始花括号必须写在方法声明后自成一行,结束花括号也必须写在方法主体后自成一行

  14. 类的属性和方法必须添加访问修饰符,abstract和final必须声明在访问修饰符之前,而static必须声明在访问修饰符之后。

  15. 方法名,属性名不可通过下划线来区分private或public。

  16. 方法的参数列表中,每个逗号后面必须要有一个空格,而逗号前面则一定不可有空格,有默认值的参数,必须放在参数列表的末尾。

    
    <?php
    
    class ClassA
    {
        public function methodA($arg1, $arg2, $arg3 = [])
        {
    
        }
    
        final public static function methodB()
        {
    
        }
    }
    
    
  17. 控制结构的关键词后必须有一个空格,左括号后和右括号前一定不可有空格,右括号与开始花括号间必须有一个空格,结束花括号必须在结构体主体后单独成行。

    
    <?php
    
    if ($exp1) {
        //if body
    } elseif {
        //elseif body
    } else {
        //else body
    }
    
    
    
    <?php
    
    switch ($expr) {
        case 0:
            echo "case 0";
            break;
        case 1:
            echo "case 1";
            // no return
        case 2:
        case 3:
        case 4:
            break;
        default:
            echo "default";
            break;
    }
    
    
    
    <?php
    
    while ($expr) {
        // while body
    }
    
    do {
        // while body
    } while ($expr);
    
    
    
    <?php
    
    for ($i=0; $i < 10; $++) {
        echo "{$i}\n";
    }
    
    foreach ($iterable as $key => $value) {
        echo $key . $value . "\n";
    }
    
    
    
    <?php
    
    try {
        // body
    } catch (\Exception $e) {
        echo $e->getMessage();
    }
    
    
  18. 闭包声明时,关键字function和use的前后都必须要有一个空格,开始花括号必须写在声明的同一行,结束花括号必须紧跟主体结束的下一行。

  19. 闭包中的参数列表规则,同等于一般函数的参数列表规则。

    
    <?php
    
    $closureA = function ($arg1, $arg2) {
    
    };
    
    $closureB = function ($arg1, $arg2) use ($var1, $var2) {
    
    }
    
    $closureC = function (
        $longArgu1,
        $longArgu2
    ) {
    
    };
    
    $closureD = function (
        $longArgu1,
        $longArgu2
    ) use (
        $longVar1,
        $longVar2
    ){
    
    };
    
    
    

现行系统问题总结

变量名称约定

注释规范

  1. 注释必须遵循phpDocumentor的规范。
  2. 类的所有public方法必须添加注释,且注释的内容应该包含参数类型、参数含义和返回值。
  3. 多余的注释必须删除,其中多余表示的是对于代码阅读无关紧要、代码的注释等。

编码要求

  1. 除了入口文件处,禁止向全局空间中注册任何函数。
  2. 不能直接向全局空间中注册类,类必须要属于明确的名称空间。
  3. 数组的键必须为小写字母,多个单词间用下划线分隔。
  4. 不得直接实例化任何非服务或公开的类。
  5. 项目中的所有目录必须有明确的作用和含义,不得存在相同作用或含义的目录。
  6. 单个文件禁止超过1500行,单个方法禁止超过80行,单个类禁止超过800行
  7. 所有的类必须通过composer实现自动加载,不得在代码中直接引入或使用其它方式引入。
  8. 类和方法的职责必须单一,不允许一个方法或类处理多个不同的业务场景。
  9. 项目配置文件必须统一在一个目录下,不得分散在多处存储。
  10. 第三方服务的接入代码和系统自身的业务代码必须切割开,不得混合在一起。
  11. 禁止直接粘贴复制其它地方的代码,若必须要使用,则和作者商量以服务性代码的形式开放。
  12. 禁止在除入口文件处,定义全局常量,变量等。
  13. 所有要使用的变量必须先声明,禁止直接使用未声明的变量。
  14. ifelse, foreach语句禁止嵌套超过3层,代码中应该减少直接的ifelse嵌套结构。
  15. 禁止直接使用全局魔术变量,如$_POST,$_GET,$_SERVER等。
  16. 业务逻辑代码中,禁止直接写html代码。
  17. 优先使用表单或者post方法提交参数,其次get方法。
  18. 未使用的局部变量,必须删除。
  19. 基础的服务性质类应编写单元测试,且单元测试覆盖率必须超过90%

说明

  本规范处于持续更新中。现版本为试行版!

转载于:https://my.oschina.net/taodf/blog/2218936

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值