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);