(я тестировал с PHP 5.3.1)
Одна забавная вещь состоит в том, что эта часть кода:
<?php
var_dump(${'_' . 'REQUEST'});
Получает уведомление Undefined variable: _REQUEST
Но вот этот:
<?php
var_dump($_REQUEST);
var_dump(${'_' . 'REQUEST'});
Не уведомляет и отображает два пустых массива.
Какое-то время я думал, что это может быть связано с auto_globals_jit
, но $_REQUEST
не кажется заинтересованным этой директивой ... Но здесь есть одна интересная вещь:
Использование переменных SERVER и ENV
проверено во время компиляции так
используя их, например, переменная
переменные не вызовут их
инициализации.
Возможно, в конце концов, даже если в руководстве не сказано, auto_globals_jit
влияет на $_REQUEST
...
И, конечно, я выключил auto_globals_jit
в своем файле php.ini
:
; When enabled, the SERVER and ENV variables are created when they're first
; used (Just In Time) instead of when the script starts. If these variables
; are not used within a script, having this directive on will result in a
; performance gain. The PHP directives register_globals, register_long_arrays,
; and register_argc_argv must be disabled for this directive to have any affect.
; http://www.php.net/manual/en/ini.core.php#ini.auto-globals-jit
auto_globals_jit = Off
И снова попробовал этот код:
<?php
var_dump(${'_' . 'REQUEST'});
И теперь я получаю пустой массив, а не уведомление больше.
Похоже, что auto_globals_jit
действительно оказывает влияние на $_REQUEST
- даже если это не упоминается в руководстве.