Имам проблем с глобалните променливи в php. Имам набор от $screen
var в един файл, който изисква друг файл, който извиква 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