2017-12-08月会

2017-12-08月会

2017, Dec 08    

代码规范整理

纯PHP代码源文件只使用<?php,省略关闭标签?>

使用Tab键来缩进,每个Tab键长度设置为4个空格

关于业务

  • Model层,只做简单的数据表的查询;
  • 业务逻辑统一封装到 Logic层;
  • 控制器只做URL路由,负责和页面交互,不要当作 业务方法 调用;
  • 控制器层不能出现SQL操作语句 where()、order() 等模型方法, 即,控制器中,不要出现类似这样的SQL语句:D('XXX')->where()->order()->limit()->find(); where()、order()、limit() 等SQL方法只能出现在 Model层、业务层!

命名规范使用参考最开始的word文档

  • 类名 使用大驼峰式(StudlyCaps)写法,并且文件名和类名一致,命名应当是名词;
  • (类的)方法名 使用小写字母 + 下划线 写法,如 function http_send_post(),命名的应当是动词;
  • 函数名 小写字母 + 下划线 写法,如 public function http_send_post(),命名的应当是动词;
  • 变量名 小写字母 + 下划线写法,如 $current_user,命名的应当是名词;

关于类的写法

<?php
// extends和实现implement必须和 class name 写在一行,
// 同样{写一行,{ 前面有个空格
class Mysql extends ParentClass implements Itemplete {
    //属性(property)必须声明其可见性,
    //到底是 public 还是 protected 还是 private,不能省略,
    //也不能使用var, var是php老版本中的什么方式,等用于public。
    public $foo = null;
    private $name = 'yangyi';
    protected $age = '17';

    // 参数之间有一个空格。默认参数的“=”左右各有一个空格,
    // ) 与 { 之间有一个空格
    // 方法(method),必须 声明其可见性,
    // 到底是 public 还是 protected 还是 private,不能省略。
    // 如果有多个参数,第一个参数后紧接“,” ,
    // 再加一个空格:function_name($par, $par2, $pa3),
    // 如果参数有默认值,“=”左右各有一个空格分开
    public function get_info($name, $age, $gender = 1) {
        // 参数之间有一个空格。默认参数的“=”左右各有一个空格,
        // ) 与 { 之间有一个空格

    }
}

// 用到抽象(abstract)和终结(final)来做类声明时,
// 它们必须放在方法可见性声明 (public 还是protected还是private)的前面。
// 而当用到静态(static)来做类声明时,则必须放在可见性声明的后面。
abstract class ClassName {
    protected static $foo; // static放后面
    abstract protected function zim(); // abstract放前面

    final public static function bar() { // final放前面,static放最后。
        // 方法主体部分
    }
}

控制语句的规范

  • if控制语句
<?php
if ($expr1) {
    // if 与 ( 之间有一个空格,) 与 { 之间有一个空格

} elseif ($expr2) {
    // elesif 连着写,与 ( 之间有一个空格,) 与 { 之间有一个空格

} else {
    // else 左右各一个空格

}
  • switch控制语句
<?php
switch ($expr) {
// switch 与 ( 之间有一个空格,) 与 { 之间有一个空格
    case 0:
        echo 'First case, with a break'; // 对齐
        break; // 换行写break,也对齐。
    case 1:
        echo 'Second case, which falls through';
        // no break
    case 2:
    case 3:
    case 4:
        echo 'Third case, return instead of break';
        return;
    default:
        echo 'Default case';
        break;
}
  • 循环
<?php
for ($i = 0; $i < 10; $i++) {
    // for 与 ( 之间有一个空格,二元操作符 "="、"<" 左右各有一个空格,
    // ) 与 { 之间有一个空格

}
foreach ($iterable as $key => $value) {
    // foreach 与 ( 之间有一个空格,"=>" 左右各有一个空格,
    // ) 与 { 之间有一个空格

}
try { // try 右边有一个空格

} catch (FirstExceptionType $e) {
    // catch 与 ( 之间有一个空格,) 与 { 之间有一个空格

} catch (OtherExceptionType $e) {
    // catch 与 ( 之间有一个空格,) 与 { 之间有一个空格

}

关于空格的使用

  • 赋值操作符、逻辑操作符、等号操作符、关系运算符、按位操作符、连接符 左右各有一个空格;
  • if,else,elseif,while,do,switch,for,foreach,try,catch,finally 等 与 紧挨的左括号“(”之间有一个空格; 函数、方法的各个参数之间,逗号(”,”)后面有一个空格;

关于空行的使用

  • 所有左花括号 { 都不换行,并且 { 紧挨着的下方,一定不是空行;
  • 同级代码(缩进相同)的 注释(行注释/块注释)前面,必须有一个空行;(用以形成段落表明以下内容为一段)
  • 各个方法/函数 之间有一个空行;
  • 如果 return 语句之前只有一行PHP代码,return 语句之前不需要空行;
  • 如果 return 语句之前有至少二行PHP代码,return 语句之前加一个空行;
  • if,while,switch,for,foreach、try 等代码块之间 以及 与其他代码之间有一个空行;
  • 综上述一个段落的意思表达完了都应该空一行

关于错误抑制符@ 禁用@

参考:


如何命名规范

  • 类的名称一般是名词,而方法的名称一般是动词或动词短语,其参数为名词
  • 命名应当表达:它为什么存在,用来做什么,怎么用
  • 用名字表达变量所代表的是什么,不包含晦涩的缩写,同时也没有歧义(命名的名字跟概念相似所以容易记忆)
  • 不要使用反逻辑来为编程命名
IsEnabled  IsNotEnabled`
if (!(isAdmin || isUser)) if(!isAdmin && !isUser)
  • Total、 Sum、 Average、 Max、 Min、 Record、 String、 Pointer 这样的表示计算结果的词语修饰某个变量时,请记住放在最后面 transfer_total, total_sum, freight_max

  • 为循环下标命名

    i, j, k只能适用在非常简单的循环里,最多只能有几行。而且只能在循环之内用。所以尽可能的用比i, j, k更具体更形象的名字来命名。

  • 统一单词的连接都是下滑线
  • 布局命名规范

    安平

  • 常规属性的命名,lnk_ , btn_ , radio_, checkbox_,
  • j_这种命名可以 j_btn_add_channel, j_lnk_show_content

使用变量

  • 声明的时候初始化话变量
  • 在靠近初次使用变量的时候初始化变量
  • 在理想的情况下,在靠近初次使用变量的位置声明和定义该变量

    声明制定了该变量的类型,定义为变量指定了特定的取值

参考