У меня проблемы с глобальными переменными в php. У меня есть переменная $screen
, установленная в одном файле, для которой требуется другой файл, который вызывает initSession()
, определенный в еще одном файле. initSession()
объявляет global $screen
, а затем обрабатывает $screen ниже, используя значение, установленное в самом первом скрипте.
Как это возможно?
Чтобы сделать ситуацию еще более запутанной, если вы попытаетесь снова установить $screen, а затем вызвать initSession()
, он снова использует значение, использованное впервые. Следующий код описывает процесс. Может ли кто-нибудь объяснить это?
$screen = "list1.inc"; // From model.php
require "controller.php"; // From model.php
initSession(); // From controller.php
global $screen; // From Include.Session.inc
echo $screen; // prints "list1.inc" // From anywhere
$screen = "delete1.inc"; // From model2.php
require "controller2.php"
initSession();
global $screen;
echo $screen; // prints "list1.inc"
Обновление:
Если я снова объявлю $screen
глобальным непосредственно перед запросом второй модели, $screen будет корректно обновлен для метода initSession()
. Странный.
global $a;
эквивалентно$a =& $GLOBALS['a'];
. То есть создает ссылку в локальной области видимости с тем же именем. Вне функции вы всегда находитесь в глобальной области видимости. PHP не предоставляет файловую область. - person Matthew   schedule 19.03.2010