好像大都人都以为Include文件是一件很是简朴的工作,惋惜裂痕往往呈此刻我们忽视的处所。正所谓千里之堤溃于蚁穴,二战期间,法国人寄但愿与马奇诺防地,却忽视了原本认为很是安详的阿登高地,让德国人有机可乘,最终的功效各人都知道了。
下面这个例子固然是我杜撰的,可是我确信现实环境里必然存在雷同的问题:
<?php
$debug = false;
// ...
$config = include 'config.php';
// ...
if ($debug) {
phpinfo();
}
?>
码农在代码中埋了一个调试开关,缺省是封锁状态,须要的时候可以开启,以便显示一些非凡的信息,同时代码里包括了一个设置文件,,它的内容大抵如下所示:
<?php
return array(
'foo' => '...',
'bar' => '...',
);
?>
溘然有一天,码农因为一些其它的缘由修改了设置文件,引入了一些姑且变量:
<?php
$debug = true;
$config = array(
'foo' => '...',
'bar' => '...',
);
/*
if ($debug) {
var_dump($config);
}
*/
return $config;
?>
功效问题发生了!设置文件里的姑且变量(debug)污染了其它剧本的变量空间,进而导致代码执行的功效不再切合预期,最终问题也就在所不免了。
如何安详的Include文件?很简朴,在Include的时候留意限制变量的浸染域即可:
<?php
$config = call_user_func(function() {
return include 'config.php';
});
?>
雷同的做法在Javascript中很常见,但在PHP中却鲜有人留意,你的代码有问题么?