編輯:好吧,我重新閱讀你的問題,我覺得我得到你現在在說什麼:
你想是這樣工作的:
// myInclude.php
$x = "abc";
// -----------------------
// myRegularFile.php
function doInclude() {
include 'myInclude.php';
}
$x = "A default value";
doInclude();
echo $x; // should be "abc", but actually prints "A default value"
如果您只是改變了幾個變量,並且您事先知道包含中將定義哪些變量,將其聲明爲函數中的global
。
另外,如果您的每一個包括可以定義任意數量的變量,你可以把他們都變成一個數組:
// myInclude.php
$includedVars['x'] = "abc";
$includedVars['y'] = "def";
// ------------------
// myRegularFile.php
function doInclude() {
global $includedVars;
include 'myInclude.php';
// perhaps filter out any "unexpected" variables here if you want
}
doInclude();
extract($includedVars);
echo $x; // "abc"
echo $y; // "def"
原來的答案:
這樣的事情被稱爲「封閉」,並正在推出PHP 5.3中的版本。
http://steike.com/code/php-closures/
使用extract($ _ GLOBALS)會更好嗎?在我的函數調用呢?
親愛的主,沒有。如果要從函數內部訪問全局變量,只需使用global
關鍵字。例如:
$x = "foo";
function wrong() {
echo $x;
}
function right() {
global $x;
echo $x;
}
wrong(); // undefined variable $x
right(); // "foo"
在我的情況下訴諸你的「編輯2」,只是使用包括沒有工作,因爲我有更多的東西在繼續。基本上認爲它是一個「視圖」類,它需要一個viewscript.php,因爲我們在插件範圍內,我想將「全局」範圍傳遞給視圖,而不需要將每個變量都聲明爲全局的「 doInclude「功能。 – 2013-02-23 23:15:15