# 编码规范

KaliPHP 框架主张开发时以敏捷为原则，但基本的规范必须遵守，程序要注重可读性，不要有太多“个性化”的代码！\
为了方便更快入门，这里提取重点说明如下： \
1、 缩进用4个空格代替制表符，以便于不同环境下有更好的兼容性。 \
2.、大括号不管内容多少，都建议换行，这样可以保持代码的阅读简易性。

```
if() { ... }

function test() { ... }
```

3、变量、成员函数、类名、表名、字段名等命名用下划线分隔法，并且全用小写字母。

```
$acc_users、open_account()
```

4、变量、成员函数如果是 private、protected 的，以下划线开头。

```
private $_acc_users;
private function _open_account()
```

5、文件命名规范。

```
cls_ 框架基础类文件     （存放在 lib）

mod_ 数据模型类        （存放在 appdir/model）

pub_mod_ 公共数据模型类 （存放在 ../appdir/model）

ctl_ 应用目录控制器类   （存放在 appdir/control）
```

6、模板文件命名方式为：(ctl name).(action name).tpl\
其中 ac=index 的 index 可以省缺，如：

```
template/index.tpl
template/index.index.tpl
template/archives.add.tpl
```

7、开发时使用严格模式，重点需要注意下面几点：\
&#x20;   (1)、严禁变量没有赋值就直接使用；\
&#x20;   (2)、字符串中使用变量应该用{}括起来。  \
&#x20;   (3)、对于没有内部使用变量的字符串尽量用 '' 表示，表示数组元素的字符串，必须用 '' 括起来。  \
&#x20;   (4)、数据模型类尽量偏向使用静态方法的原则，使程序简单易读（对于逻辑极明显的类可例外，一般是库或第三方的库才允许使用动态对象）。&#x20;

8、关于源码编码问题需特别注意的是： \
&#x20;   没特殊情况，项目都是推荐用utf-8编码的，由于php无法处理带bom的源码，所以务必把源码保存为utf-8无bom的格式，以免输出多余的头导致出错！

&#x20;9、关于文件格式问题需特别注意的是： \
&#x20;   由于历史原因，导致Windows，Unix/Linux，Mac三者之间，对于文件中所用回车换行符，表示的方法，都不一样。这就导致了很多人都会遇到回车换行符的困惑，比如在Unix/Linux和Mac下面使用vim编辑Windows格式的文档，会出现很多 ^M 字符，给阅读带来不便，所以在Windows下面开发的同学，务必把档案格式改为Unix/Linux，以便统一风格。&#x20;

10、关于在控制器使用私有方法原则： \
&#x20;   控制器类是不放私有逻辑的，但有时为了简便起见，也允许放不公用的简单逻辑代码，这种代码函数名用 \_ 开头。  建议模型类里的私有方法也用这种方式书写，这样用不同编辑器读代码时都能更简便的识别整个类的情况 。&#x20;

11、关于PHP表达式之间的空格： \
&#x20;   对于初级程序员，往往对代码的空格之类有恐惧症，担心一些多余的空格会影响代码执行或性能，在表达式、变量列表之间没有空格，这样的代码，实际上是很不美观的，修改时受到光标位置的影响，也更容易改错，一般性的建议是：运算符和变量之间，应该留有空格；函数参数列表之间，应该含有空格；括号的两端如果含有表达式或多个变量的，也应该含有空格。 如：

```
$data=array(
    'name'=>'test',
    'pass'=>'test'
);

cache::set("info","userinfo",$data,86400);

if(!is_array($data))$data=array($data);

foreach($data as $key=>$val)
```

像上述代码，即使已经进行语法加亮，都会有密麻的感觉，建议按如下方式加空格：

```
$data = array(
    'name' => 'test',
    'pass' => 'test'
);

cache::set("info", "userinfo", $data, 86400);

if( !is_array($data) ) $data = array($data);

foreach( $data as $key => $val )
```

如：

```
>$name = "seatle"; // 姓名
$sex = 1; // 性别
$age = 25; // 年龄
```

像上述代码，一旦定义变量多起来，就会犹如杂草丛生，建议按如下方式对齐：

```
$name = "seatle"; // 姓名
$sex  = 1;        // 性别
$age  = 25;       // 年龄
```

12、代码安全务必注意事项：\
&#x20;   (1)、凡是where查询语句里的变量，务必加引号，即使是int类型的；符合某种类型的，就必须按某种类型预先过虑；\
&#x20;   (2)、insert、update类语句，如果不是使用curd类，必须要进行操作前对所有数据安全性进行检测；\
&#x20;   (3)、凡是可能直接向页面输出的内容，必须考虑屏蔽script、iframe、meta等，以免产生xss跨站漏洞；\
&#x20;   (4)、涉及文件上传的，必须多次详细进行检查，确定漏洞存在可能性。
