Yii 编码规范简记 (他山之石)

作者:Jeen 发布于:2013-6-8 9:40 Saturday 分类:叽叽歪歪

1 概括

  • 文件必须只使用
  • PHP文件必面只全名用UTF-8编辑,无BOM头。
  • 代码使用tab做为缩进,不使用空格
  • 类名定义必需使用 驼峰式大小写 http://baike.baidu.com/view/2359058.htm
  • 类常量定义必须使用会大写,多个单词使用下划线分开.
  • 自定义类方法必须使用 驼峰拼写法 http://baike.baidu.com/view/2140462.htm
  • controllerID, moduleId, actionId 需要使用 驼峰拼写法 http://baike.baidu.com/view/2140462.htm
  • 除对ORACLE的模型外,类属性必须使用 驼峰拼写法 http://baike.baidu.com/view/2140462.htm
  • 私有属性必须以下划线开头
  • 使用elseif 而不使用else if

2 文件

  • PHP标签
    • 文件必须只使用
    • 在只有php代码的文件中,应该不包含 ?>
    • 不要在最后一行点空格
    • 所有包含php代码的文件,都要以.php做为扩展名。
  • 字符编码
    PHP文件必面只全名用UTF-8编辑,无BOM头。

3 类名

类名定义必需使用 驼峰式大小写 http://baike.baidu.com/view/2359058.htm
例如:Controller, Model

4 类

这里的类,包含类及接口。

  • 类的名字应该使用驼峰式大小写
  • 大括号,应该写下类名的下一行
  • 每个类都应该有一些注解
  • 每个类的应该有同一的缩进格式
  • 一个文件,应该仅包含一个类
  • 类的名字应该与类的文件命匹配。
/**
 * Documentation
 */
class MyClass extends Object implements MyInterface
{
    // code
}

4.1 常量

类常量定义必须使用会大写,多个单词使用下划线分开.

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

4.2 属性

  • 公有属性,应该明确指定public关键词
  • 变量应该定义在所有方法之前
  • 私有变量应该类似于 $_varName;
  • 类成量变量及普通变量,能应该使用驼峰拼写法
  • 尽量使用具有描述性的变理名,不要使用$i 或 $j

如下:

<?php
class Foo
{
    public $publicProp;
    protected $protectedProp;
    private $_privateProp;
}

4.3 方法

  • 函数及类方法,应该使用驼峰拼写法
  • 函数及方法名称应具有功能的描述性
  • 类方法应该使用private , protected和public修饰符声明。
  • 大括号需要另起一行
/**
 * Documentation
 */
class Foo
{
    /**
     * Documentation
     */
    public function bar()
    {
        // code
        return $value;
    }
}

明确类型传递,应明确类型

public function __construct(CDbConnection $connection)
{
    $this->connection = $connection;
}

4.4 文档块

@param, @var, @property and @return 应该定义类型 如 boolean, integer, string, array or null。Model 或 ActiveRecord也可以使用类名. 类型数组如ClassName[].

4.5 构造函数

  • 使用__construct做为构造函数
  • 初始化类的实例时,应该使用new MyClass(); 而不是 new MyClass;.

5 PHP

5.1 类型

所有PHP内置类型或值使用全小所,如:true, false, null和array。

关联数组,如下:

$config = array(
    'name'  => 'Yii',
    'options' => array(
        'usePHP' => true,
    ),
);

5.2 字符串

如果字符串不包含变量,请使用单引号

$str = 'Like this.';

如果字符串包含单引号,应该使用双引号,避免转义

变量内插

$str1 = "Hello $username!";
$str2 = "Hello {$username}!";

下面是不允许的

$str3 = "Hello ${username}!";

连接

连接字符串,使用.进行连接

$name = 'Yii' . ' Framework';

当字符串过长或过多,使用如下格式:
$sql = "SELECT *" 
    . "FROM `post` " 
    . "WHERE `id` = 121 ";

5.3 数组

数字索引

不要使用负数的索引下标
使用如下方式定义:

$arr = array(3, 14, 15, 'Yii', 'Framework');

如果元素太多,可分行定义
$arr = array(
    3, 14, 15,
    92, 6, $test,
    'Yii', 'Framework',
);

关系数组

关联数组定义如下:

$config = array(
    'name'  => 'Yii',
    'options' => array(
        'usePHP' => true,
    ),
);

5.4 控制语句

  • 控制语句的条件必须与大括号之间有一个空格
  • 条件中的各个部分以一个空格分开
  • 开大括号与条件在同一行
  • 结尾大括号另起一行
if ($event === null) {
    return new Event();
} elseif ($event instanceof CoolEvent) {
    return $event->instance();
} else {
    return null;
}

// 下面是不允许的
if(!$model)
    throw new Exception('test');

switch

switch格式如下:

switch ($this->phpType) {
    case 'string':
        $a = (string)$value;
        break;
    case 'integer':
    case 'int':
        $a = (integer)$value;
        break;
    case 'boolean':
        $a = (boolean)$value;
        break;
    default:
        $a = null;
}

5.5 函数调用

doIt(2, 3);

doIt(array(
    'a' => 'b',
));

doIt('a', array(
    'a' => 'b',
));

文档

  • 参考phpDoc的文档语法
  • 不允许代码没有文档
  • 所有类必须包含类级别的文档和方法的文档
  • 如果方法没有返回值,不需要使用@return

/**
 * 类的功能描述
 *
 * @author yangsong
 */
class Component extends Object

h2. 函数/方法

<pre>
/**
 * 功能描述
 * 用法
 *
 * ~~~
 * $component->getEventHandlers($eventName)->insertAt(0, $eventHandler);
 * ~~~
 *
 * @param string $name 事件名称
 * @return Vector列表
 * @throws Exception 如果event未定义
 */
public function getEventHandlers($name)
{
    if (!isset($this->_e[$name])) {
        $this->_e[$name] = new Vector;
    }
    $this->ensureBehaviors();
    return $this->_e[$name];
}
</pre>

h2. 注释

单行注释应该以 // 开始,不要使用#

标签: Yii

发表评论:

©2010-2024 Jeen All Rights Reserved.Powered by emlog 京ICP备15058100号-1