php $ _POST с использованием $$ вызова

#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:

Из руководства по php:

Примечание: Суперглобальные переменные не могут использоваться в качестве переменных внутри функций или методов класса.

Комментарии:

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']} , если бы ответ уота Чарльза не был бы правдой.