"Переменная в переменной", странное поведение.

_RVK_

Новичок
"Переменная в переменной", странное поведение.

PHP:
function foo() {
    $_POST = array(1,2,3,4,5);
    $source = '_POST';
    print_r($$source);
}

foo();
Ожидалось вывод массива $_POST, грит _POST undefined. В чем дело?

-~{}~ 10.01.05 15:34:

PHP:
function foo() {
    $_POS = array(1,2,3,4,5);
    $source = '_POS';
    print_r($$source);
}

foo();
и
PHP:
$_POST = array(1,2,3,4,5);
$source = '_POST';
print_r($$source);
Ведут себя как и следует ожидать.

Видать бурные праздники сильно сказались на способности адекватно осмысливать окружающий мир....
 

SiMM

Новичок
Интересно, на кой чёрт нужно переопределять предопределённый массив? Скорее всего проблема в том, что $_POST не простой массив, а суперглобальный - подробности, наверно, можно узнать, поковыряв исходники.
 

SiMM

Новичок
О ;)
А я боялся что меня запинают ногами за шаманские предположения ;)
PS: судя по всему это только на функции распространяется - в "основной" программе оно работает - хотя лучше наверно так не делать.
 

Фанат

oncle terrible
Команда форума
Скорее, бурные праздники сильно сказались на способности адекватно ставить перед собой задачи.
Переменные переменные - совершенно бесполезный костыль. для тех, кто не умеет работать с массивами.
 

_RVK_

Новичок
судя по всему это только на функции распространяется - в глобальной-то области видимости оно работает
Именно это и ввело в заблуждение.
хотя лучше наверно так не делать
Согласен, но иногда бывает, ели очень хочется, то можно :)

-~{}~ 10.01.05 15:57:

Фанат
Задачу я поставил правильно. Дело в том, что у меня метод класса должен получать данные из разных источников. Причем я могу указать в каком порядке и из каких источников он жоджен эти данные получать. Я пытался сделать это передавая классу cтороку вида _POST,_GET,_SESSION,_COOKIE
Это самый простой метод. Может я чего упустил/недодумал?
 

Фанат

oncle terrible
Команда форума
Прелесть какая.
Оказывается, чтобы обратиться к переменной, надо обязательно знать ее имя.
 

_RVK_

Новичок
Оказывается, чтобы обратиться к переменной, надо обязательно знать ее имя
Обрати внимание на мои слова:
Это самый простой метод
Я конечно могу, например, передавать строку вида PGSC например для указания порядка проверки глобальных массивов. Так, скорее всего теперь и буду делать.
Или я чего не понял в твоем замечании?
 

ForJest

- свежая кровь
_RVK_
Пока ты ставил себе задачи человечество изобрело способ передавать данные в функции с помощью параметров :).
function foo($Data)
{
}
foo($_POST);
foo($_GET);
...
 

Фанат

oncle terrible
Команда форума
Во-первых, у меня есть большие подозрения на то, что здесь изобретается велосипед.
что-то вроде import_request_variables
Во-вторых, меня охватывает сильное недоумение. Впрочем, оно вызвано тем, что я знаком не только с интерпретируемыми языками программирования. А еще и с компилируемыми. Где имя переменной не играет вообще никакой роли. И как-то ведь обходятся.
 

_RVK_

Новичок
Итак, чтобы небыло недопонимания, я расскажу подробнее.
У меня есть класс action который принимает имена элементов глобальных массивов и что то с ними делает.
PHP:
...
$ctrl->add_action(new action_set('save',array('about')));
$ctrl->exec();
...
Но мне нужно каким то образом указать объекту класса источник данных. Для того что бы не загружать параметрами конструктор, я решил сделать настройку-константу, содержащуюю информацию об источниках данных. У базового класса есть метод _get_data который анализирует эту настройку и возвращает массив с данными. Вот, вкрации, задача.
 

Screjet

Новичок
а почему бы не использовать для этих задач универсальный $_REQUEST ?
 

_RVK_

Новичок
Впрочем, оно вызвано тем, что я знаком не только с интерпретируемыми языками программирования. А еще и с компилируемыми
Я тоже с ними знаком. Там бы я передавал бы дополнительным параметром массив ссылок на массивы-источники. Но мне хочется использовать константу, кторая не может быть ни массивом ни ссылкой.

-~{}~ 10.01.05 17:02:

Screjet
Потому что мне нужно знать _откуда_ я получаю данные.
 

_RVK_

Новичок
Screjet
Опоздал :) Это я уже сам понял, да только решил передавать строку вида PGSC проблемма лишь в том какой буквой обозвать массив $GLOBALS :)

Ладно, тут мне уже помощь не нужна, вопрос был лишь в сабже. Всем спасибо.
 

_RVK_

Новичок
Wicked
Это ты к чему?

-~{}~ 11.01.05 11:05:

Советую перечитать топик, и попытаться понять в чем вопрос, прежде чем отвечать. Ок?
 

Wicked

Новичок
Это я про неправомочьность использования $_SERVER['REQUEST_METHOD'] для решения твоей задачи, которое вероятно(!) предлагает Screjet :)
 

_RVK_

Новичок
Wicked
Ты не понял, это был вопрос ко мне, а не предложение. Думаю Screjet, как и я, знает, что метод запроса не говорит о том каким образом передаются данные.
 
Сверху