编码风格

燃烧的冰2020-01-18  6.7K+

wellcms 主程序架构采用函数风格的 MVC 分层架构,AOP 插件机制,面向切面编程。


开发约束:采用静态语言编程风格,有利于 Zend 引擎的编译和 OPCache 缓存,支持 PHP7*


为了保持统一性,wellcms 对类、函数和变量命名进行了约定。我们提倡 Linux 的编码风格(小写 + 下划线),与 PHP 默认的命名风格保持一致,如果您喜欢匈牙利命名和驼峰式命名法也可以。


1. 变量名,函数名全部为单词或缩写单词小写 + 下划线分割,禁止使用拼音,比如:

<?php
$uid = 0;
$username = '';
mysql_connect();
mysql_query();
mysql_fetch_assoc();
?>


2. 常量全部大写:

<?php
define('DEBUG', 1); // 0: 关闭 1: 开发模式 2: 线上调试:日志记录,
define('APP_NAME', 'www');
?>


3.空格,缩进(一个 TAB = 8 个空格),换行,参考以下格式:

<?php
define('SKIP_ROUTE', 1);
include './index.php';
function array2_merge($array1, $array2, $key = '') {
    $arr = array();
    foreach ($array1 as $k => $v) {
        isset($v[$key]) ? $arr[$v[$key]] = array_merge($v, $array2[$k]) : $arr[] = array_merge($v, $array2[$k]);
    }
    return $arr;
}
?>


4.单引号、双引号的使用

在 PHP 当中,尽量使用单引号,解析速度比双引号快。如果包含变量,为了代码的易读性,可以使用双引号,在双引号中的数组 key 不应该加单引号。在单引号中仅仅转义 \,其他字符都不转义,如 \t\r\n $。

<?php
$sitename = '我在北京吸雾霾';
$info = "站点名称:$sitename";
$info = "用户名:$user[name]";
?>


5. 类、继承、接口、构造、析构、魔术方法:

尽量不要使用 PHP 高级特性。高级特性不利于底层的优化,需要更多的学习和沟通成本。

比如 __get() __set() __call() 会让代码变得很难读,不利于错误排查,IDE 提示也不友好。


6. 正则表达式:

尽量使用单引号,分隔符为 # 禁止使用 e 修饰符。刚需请使用preg_replace_callback() 代替。尽量使用 \w \s \S 内置的表示方法,不要啰嗦的去写 [0-9a-zA-Z_] 。

WEB 开发过程中,禁止使用 / 作为分隔符,因为它在字符串中出现 / 的概率太高。

以下正则格式符合标准:

preg_match('#\w+@\w+.\w+#is', $email);


7. include、include_once、require、require_once:

尽量使用 include,速度快,并且不会中断业务逻辑。require 在文件不存在或不可读的时候,会暴力终止业务逻辑。


8. error_reporting:

在本地开发环境下使用 E_ALL,消灭所有 NOTICE。

线上环境使用 0,并且配置 php.ini error_log 记录到服务器日志,避免错误信息外泄。


9.使用 php 内置函数,php内置了很多函数,不要自己去写一些没有必要的函数。


10. 禁止使用 eval() 。


11. 尽量避免 autoload。


12. 尽量避免 $$var 多重变量。


13.尽量采用函数封装功能,通过前缀区分模块。


14.为了安全,所有业务一律解析到路由运行,不在 tmp 外的目录运行 php 文件。


15.操作数据库的语句,函数封装好使用,禁止在业务代码中使用 mysql 语句。


16.保持代码可读性,完整的注释,js 代码结束必须使用英文分号 “ ; ”,js 注释请使用块注释,即 /* 注释内容 */


17.尽量使用 bootstrap 内置的 class ,不要自己写 class 和 style ,当然你也可以完全放弃bootstrap使用其他前端框架。

如刚需,请定义 class 使用,新定义的id和class请加前缀,以免相互冲突(如:.well_tag{} #well_tag{}),颜色使用 bootstrap 内置的class 或 使用 wellcms 内置颜色。

颜色请查看 view/css/wellcms_x.css

颜色调用如 background: var(--gray-200);

2