来自模块化的PHP编程环境,我习惯在php中使用变量而不考虑它们是否被实例化。
我一直在使用codeigniter大约一个月,并注意到如果它们未定义/未声明,则严格执行不使用变量。
我想知道这背后的目的是什么,与未申报变量的严格程度有何不同?
有没有办法可以在codeigniter中禁用此功能,以防我更喜欢使用未声明的变量?如果有的话,我会得到什么?
答案 0 :(得分:2)
初始化所有变量的一个重要原因是安全性。如果你有register_globals
(你不应该),那真的很重要。但即便如此,如果您的变量始终处于已定义且已知的状态,那么它的样式和辅助调试也是如此。如果你养成了总是初始化你的变量的习惯,并且突然得到关于使用未初始化变量的警告,你知道这是由于一个错字,而不是其他众多原因之一。另一个原因是在较长的函数中进行可变循环(无论如何都应该避免,但如果不重新初始化变量,则会变得非常混乱)。
由于使用未初始化的变量是语言“功能”,因此它仍可在CodeIgniter中使用。 CI可能会将默认error reporting level设置为比您习惯的更高,这可能会导致比以前更明显的警告。
如果那不是您的意思,请澄清您的问题。
答案 1 :(得分:0)
在项目根目录下的index.php文件中设置:
error_reporting(E_ALL);
为:
error_reporting(E_ALL & ~E_NOTICE);
此设置不显示E_NOTICE级别错误
了解更多信息,请查看http://uk.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting
答案 2 :(得分:0)
不初始化变量的意思是每个未实例化的变量都会发生隐藏的E_NOTICE错误。这会产生大量不必要的开销,因为系统必须处理E_ERROR的每个实例,无论它是由 error_reporting()
记录还是关闭