$_POST['asdf'] = 'something'; function test() { // NULL -- not what initially expected $string = '_POST'; echo '===='; var_dump(${$string}); echo '===='; // Works as expected echo '++++++'; var_dump(${'_POST'}); echo '++++++'; // Works as expected global ${$string}; var_dump(${$string}); } // Works as expected $string = '_POST'; var_dump(${$string}); test();
Я не понимаю, почему такое поведение .. может кто-нибудь объяснить .. Мне нужно знать, почему такое поведение. Я на самом деле не получаю код ..
PHP не имеет реальных глобальных переменных. «Суперглобалы» также являются неправильным. $_POST
и $_GET
никогда не присутствуют в хэш-таблицах локальных переменных. Они существуют как псевдонимы, которые PHP видит только для обычных доступов. Метод доступа переменной переменной всегда смотрит в текущую локальную хеш-таблицу.
global $$string; // $$string = & $GLOBALS[$string];
Является отличным трюком для создания ссылки на суперглобалы в локальной хэш-таблице. Вот почему после этого утверждения вы можете использовать переменные переменные для доступа к «суперглобалам».
Посмотрите здесь
Обратите внимание, что переменные переменные не могут использоваться с массивами Superglobal от PHP в рамках функций или методов класса. Переменная $ this также является специальной переменной, на которую нельзя ссылаться динамически.