Редактировать: Хорошо, я перечитал ваш вопрос и думаю, что понял, о чем вы сейчас говорите:
Вы хотите, чтобы что-то вроде этого работало:
// 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
в функции doInclude()
.
В качестве альтернативы, если каждое из ваших включений может определять любое количество переменных, вы можете поместить их все в один массив:
// 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"