美观
1. 数组标识
定义数组时,应当根据php版本选择不同的定义方式,新版本的定义方法往往更加美观:
- 对于PHP 7以前的版本,只能使用array()
- 对于PHP 7之后的版本,定义数组时使用[]更好
2. 数组追加
在对数组进行追加时,不可使用+=号,最美观简单的方法是使用PHP特有的连加符号:
$Array1 = ["1"];
$Array2 = ["2"];
$Array1[] = $Array2;
var_dump($Array1) // 输出Array([0]=>"1",[1]=>"2")
!注意:
PHP中所有数组的值都是有$key前缀的,如:
$Array = [1,2,3];
实际上,$Array应当被看做如下形式:
$Array = [[0]=>1,
[1]=>2,
[2]=>3];
效率
1. 列表匹配select
当进行类似如下操作:
foreach($idList as $id){
$this->db->select()->from('table')->where(['id'=>$id])->get()->result_array();
}
我们发现这么做会多次访问数据库,效率很低,这时可以使用where_in限定将访问次数降为一次:
$this->db->select()->from('table')->where_in('id',$idList)->get()->result_array();
2. select应当指定具体值
在进行select的时候,需要什么值,最好在select中指定出来,一是提高代码可读性,而是提高搜索效率、减小数据传输量
//Bad way:
$result = $this->db->from('attachment')->where(['id'=>$id])->get()->result_array();
$id = $result[0]['id'];//其他不需要的值会浪费内存
//Good way:
$this->db->select(['id','name','location'])->from('attachment')->where(['id'=>$id])->get()->result_array();
$id = $result[0]['id'];//只选取三个值,内存占用少得多
3. 函数形参应标注类型
标注形参类型的函数声明方式可以大大减小函数出错的概率,在debug期间就能把很多问题扼杀在初期:
public function getPage(int page){}
Database构造器类
1. 获取自增ID值
对于数据库中具有Auto_increment的ID属性,在进行了insert操作后,可以直接使用insert_id获得id值,不需要再select一次:
$this->db->insert('details', $detailsArray);
$id = $this->db->insert_id();
2. Update和Delete等操作的where限定应该在确认函数前添加
!使用where_in时,必须把where_in放在delete前面:
$this->db->where_in('id',idArray)->delete('user');
!附加理解
CI的db构造器类使用时,where或where_in等限制的必须放在执行函数前
- 对于DELETE,UPDATE等命令来说,其执行函数为自身,也就是update(),delete()
- 对于SELECT来说,执行函数为get()
一般性错误
1. $_Session变量只能在Controller中使用,不可出现在Model中
TIPS
1. 不要过度依赖自己定义的Private函数
过多的封装Private函数会降低代码可读性,因此,若不是需要多次重用的代码,最好不要将其进行封装。
2. 给定类型的函数形参在指定默认值时可能发生错误
在项目过程中,我们团队发现,当测试环境苛刻时,以下代码将报错:
public function getPage(int page=1){
...
}
改为以下将恢复
public function getPage(page=1){
...
}
原因已经明了:那个兄弟用的是PHP 5.X