#php #variables #post
#php #переменные #Публикация
Вопрос:
Я знаю, что следующий фрагмент кода возможен в php:
$dog = 'Woof!';
$cat = 'Miauw!';
$animal = 'dog';
var_dump($$animal);
Вывод: ‘Гав!’
Конечно, это упрощенный пример моего реального кода, тем не менее, вы поняли идею. Кажется, теперь я не могу заставить $_POST
переменную действовать таким же образом.
Пример:
$method = '_POST';
$$method['password'] = array();
// In the end i would want this piece of code above to do what i typed below
$_POST['password'] = array();
Вывод: ‘Уведомление: Неопределенная переменная: _POST’
Значит ли это, что невозможно вызвать $ _POST таким образом, или я делаю это неправильно?
Комментарии:
1. Зачем вам обращаться к $_POST через имена переменных? Что вы получаете, когда выполняете var_dump ($$метод)?
2. завершите съемку в темноте, но попробуйте ${$method}[‘password’]. Мне интересно, является ли проблема массивом, а не переменной.
3. @Michael это позволяет децентрализовать используемый вами метод вместо использования кучи условных выражений.
4. Использование
$$
синтаксиса — плохая новость. Это не так плохоeval()
, но это довольно близко ко второму. Пожалуйста, постарайтесь избежать этого — всегда есть лучшее решение, чем это.5. @Spudley что ты предлагаешь?
Ответ №1:
Примечание: Суперглобальные переменные не могут использоваться в качестве переменных внутри функций или методов класса.
Комментарии:
1. В его примере $method больше не является переменной переменной, это копия массива $ _POST и, следовательно, больше не является суперглобальным.
2. метод @Evert $ действительно не является сверхглобальным, но Чарльз все равно прав, потому что, в конце концов, я пытаюсь вызвать сверхглобальный $ _POST через переменные переменные, используя $method .
Ответ №2:
Как указано в других ответах, даже суперглобальные значения не являются реальными глобальными значениями в PHP. Они должны быть специально импортированы в локальную область dict, чтобы быть доступными с помощью переменных variable.
Если вы действительно хотите получить доступ только к $ _POST и $ _GET или $ _REQUEST, то явный синтаксис будет, однако:
$GLOBALS[$method]['password'] = array();
Ответ №3:
$$method['password'] = array();
вычисляется как:
${$method['password']} = array();
PS: Возможно, вам лучше этого не делать. Переменные переменные сбивают с толку и считаются немного плохой практикой.
Комментарии:
1. В моем примере я бы хотел
${$method}['password']
вместо${$method['password']}
, если бы ответ уота Чарльза не был бы правдой.