Проблема с именем переменной в другой переменной

jenia

Новичок
Проблема с именем переменной в другой переменной

Есть такой участок кода:
$method = "POST";
$var = "_".$method."['login']";
print $$var;

Как я понимаю должно вывести то, что лежит в $_POST['login'], но выводит: Undefined variable: _POST['login']...
Если попробовать вывести так:
print $_POST['login'];
то выводит содержимое $_POST['login']. Подскажите пожалуйста, в чём я ошибся.
 

master_x

Pitavale XXI wieku
jenia
данная техника не работает с суперглобалами (GET, POST...)
 

jenia

Новичок
_RVK_
Спасибо большое. Этот вариант вполне подходит.
 

Фанат

oncle terrible
Команда форума
_RVK_
тебе ничачот.
большой низачот.

jenia
Тебе решение этой задачи не нужно.
ты должен всегда знать, откуда пришла переменная.
 

_RVK_

Новичок
Фанат
Была у меня подобная задача. Нужно было определить порядок получения переменных из массивов (типа настройки GPC) для объекта. Так же, например, подобная ситуация может возникнуть когда нужно менять поведение объекта класса, указывая ему с какими массивами он должен работать.
Так что подобная проблемма вполне имеет право на жизнь.
 

Фанат

oncle terrible
Команда форума
здесь не задачи, имеющие право на жизнь обсуждают.
а отвечают чайнику, который пхп в первый раз неделю назад увидел.
РАЗНИЦУ понимаешь?
 

McSimm

Новичок
_RVK_
а так?

$GLOBALS["_$method"]['login'];

-~{}~ 03.03.06 10:32:

кстати, согласен с Фанат полностью, когда человек хочет странного, почти наверняка он просто не на правильном пути :)
 

jenia

Новичок
Задача у меня такая: передать в функцию только имя переменной, а уже в функции проверить эту переменную по определённым параметрам.
Почему не могу передать в функцию саму переменную? Потому, что переменная эта может не существовать, тогда вылезет ошибка.
Почему не могу проверить на существование в основной функции? Потому, что хочется написать функцию, которая будет производить проверку по всем параметрам и ни одна из проверок не будет находится за функцией. Потом написать что-то типа библиотеки функций и подключать её везде, где требуется проверка.
Переменная приходит от пользователя в массиве ПОСТ.
Если я в чём-то не прав - поправьте пожалуйста.
 

SiMM

Новичок
> Задача у меня такая: передать в функцию только имя переменной, а уже в функции проверить эту переменную по определённым параметрам.
Передавай ссылку.
PHP:
function foo(&$var){
  var_dump($var);
}
foo($undefined_variable);
// NULL
 

jenia

Новичок
McSimm
Нет.

function reg () {

$otvet = proverka($_POST['login']);
...
}

function proverka() {
...
}
Но, если $_POST['login'] не существует, выдаётся ошибка.

SiMM
Твой код обдумываю.
 

jenia

Новичок
SiMM
Наверное это то, что надо. Спасибо.

McSimm
Ты меня не совсем понял (или я тебя). Я проверку хочу осуществлять в другой функции (не в основной), и не знал как передать в неё имя проверяемой переменной. А в твоём примере проверка происходит сразу же. Может я неправильно понял твой пример?
 

McSimm

Новичок
jenia
Да, я привел пример другой функции, не основной.
И если известно, что проверять надо только элементы массива $_POST (я привел цитату), то почему бы не передавать только индекс ?

-~{}~ 03.03.06 21:40:

PHP:
function reg () {

$otvet = proverka('login');
...
}

function proverka($varname) {
...проверяем $_POST[$varname]
}
 

SiMM

Новичок
> И если известно, что проверять надо только элементы массива $_POST (я привел цитату), то почему бы не передавать только индекс ?
Зачем ограничивать область применения функции массивом $_POST, когда есть простое, гибкое и более универсальное решение? Не создавать же однотипные функции на каждый чих.
 

jenia

Новичок
Я не правильно пояснил в начале. Возможно, что данные будут не только пост, но и гет. Тогда придётся проводить ещё одну проверку в функции проверки, либо передавать в функцию ещё и метод, которым передаются данные. Твой вариант тоже нормально работает.
Так какой тогда из вариантов выбрать? Твой или SiMM???

-~{}~ 03.03.06 20:46:

Я больше склоняюсь к варианту SiMM
 
Сверху