好像大都人都以為Include文件是一件很是簡樸的工作,惋惜裂痕往往呈此刻我們忽視的處所。正所謂千里之堤潰于蟻穴,二戰(zhàn)期間,法國人寄但愿與馬奇諾防地,卻忽視了原本認為很是安詳?shù)陌⒌歉叩兀尩聡擞袡C可乘,最終的功效各人都知道了。
下面這個例子固然是我杜撰的,可是我確信現(xiàn)實環(huán)境里必然存在雷同的問題:
<?php
$debug = false;
// ...
$config = include 'config.php';
// ...
if ($debug) {
phpinfo();
}
?>
碼農(nóng)在代碼中埋了一個調(diào)試開關(guān),缺省是封鎖狀態(tài),須要的時候可以開啟,以便顯示一些非凡的信息,同時代碼里包括了一個設(shè)置文件,,它的內(nèi)容大抵如下所示:
<?php
return array(
'foo' => '...',
'bar' => '...',
);
?>
溘然有一天,碼農(nóng)因為一些其它的緣由修改了設(shè)置文件,引入了一些姑且變量:
<?php
$debug = true;
$config = array(
'foo' => '...',
'bar' => '...',
);
/*
if ($debug) {
var_dump($config);
}
*/
return $config;
?>
功效問題發(fā)生了!設(shè)置文件里的姑且變量(debug)污染了其它劇本的變量空間,進而導致代碼執(zhí)行的功效不再切合預期,最終問題也就在所不免了。
如何安詳?shù)腎nclude文件?很簡樸,在Include的時候留意限制變量的浸染域即可:
<?php
$config = call_user_func(function() {
return include 'config.php';
});
?>
雷同的做法在Javascript中很常見,但在PHP中卻鮮有人留意,你的代碼有問題么?