请勿滥用require_once,尤其是在类中
2015-12-22
0x001 前景提要
require
包含一个文件,文件不存在时报错并终止脚本运行
require_once
同上。区别在于该文件如果已被包含过则不再包含,可防止变量、函数冲突等问题
0x002 问题重现
在一个小项目中两次require_once
了 Codeigniter-Database ,并两次调用这个类中的初始化方法。发现第二次调用总会报错“数据库配置无效”
0x003 问题分析
在初始化方法的代码中,我发现数据库配置文件是用require_once
加载数据库配置文件的
而require_once
只会包含一次文件,因此第二次执行该命令时并没有包含配置文件,自然就报错了
0x004 问题解决
将require_once
改为require
如果是引入类的话,为啥不用spl_autoload_register
实际情况有些复杂,不适合这个