好像大都人都以為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中卻鮮有人留意,你的代碼有問題么?