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

  • Автор темы Автор темы _RVK_
  • Дата начала Дата начала

_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);

Ведут себя как и следует ожидать.

Видать бурные праздники сильно сказались на способности адекватно осмысливать окружающий мир....
 
Интересно, на кой чёрт нужно переопределять предопределённый массив? Скорее всего проблема в том, что $_POST не простой массив, а суперглобальный - подробности, наверно, можно узнать, поковыряв исходники.
 
О ;)
А я боялся что меня запинают ногами за шаманские предположения ;)
PS: судя по всему это только на функции распространяется - в "основной" программе оно работает - хотя лучше наверно так не делать.
 
Скорее, бурные праздники сильно сказались на способности адекватно ставить перед собой задачи.
Переменные переменные - совершенно бесполезный костыль. для тех, кто не умеет работать с массивами.
 
судя по всему это только на функции распространяется - в глобальной-то области видимости оно работает
Именно это и ввело в заблуждение.
хотя лучше наверно так не делать
Согласен, но иногда бывает, ели очень хочется, то можно :)

-~{}~ 10.01.05 15:57:

Фанат
Задачу я поставил правильно. Дело в том, что у меня метод класса должен получать данные из разных источников. Причем я могу указать в каком порядке и из каких источников он жоджен эти данные получать. Я пытался сделать это передавая классу cтороку вида _POST,_GET,_SESSION,_COOKIE
Это самый простой метод. Может я чего упустил/недодумал?
 
Прелесть какая.
Оказывается, чтобы обратиться к переменной, надо обязательно знать ее имя.
 
Оказывается, чтобы обратиться к переменной, надо обязательно знать ее имя
Обрати внимание на мои слова:
Это самый простой метод
Я конечно могу, например, передавать строку вида PGSC например для указания порядка проверки глобальных массивов. Так, скорее всего теперь и буду делать.
Или я чего не понял в твоем замечании?
 
_RVK_
Пока ты ставил себе задачи человечество изобрело способ передавать данные в функции с помощью параметров :-).
function foo($Data)
{
}
foo($_POST);
foo($_GET);
...
 
Во-первых, у меня есть большие подозрения на то, что здесь изобретается велосипед.
что-то вроде import_request_variables
Во-вторых, меня охватывает сильное недоумение. Впрочем, оно вызвано тем, что я знаком не только с интерпретируемыми языками программирования. А еще и с компилируемыми. Где имя переменной не играет вообще никакой роли. И как-то ведь обходятся.
 
Итак, чтобы небыло недопонимания, я расскажу подробнее.
У меня есть класс action который принимает имена элементов глобальных массивов и что то с ними делает.
PHP:
...
$ctrl->add_action(new action_set('save',array('about')));
$ctrl->exec();
...

Но мне нужно каким то образом указать объекту класса источник данных. Для того что бы не загружать параметрами конструктор, я решил сделать настройку-константу, содержащуюю информацию об источниках данных. У базового класса есть метод _get_data который анализирует эту настройку и возвращает массив с данными. Вот, вкрации, задача.
 
а почему бы не использовать для этих задач универсальный $_REQUEST ?
 
Впрочем, оно вызвано тем, что я знаком не только с интерпретируемыми языками программирования. А еще и с компилируемыми
Я тоже с ними знаком. Там бы я передавал бы дополнительным параметром массив ссылок на массивы-источники. Но мне хочется использовать константу, кторая не может быть ни массивом ни ссылкой.

-~{}~ 10.01.05 17:02:

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

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

-~{}~ 11.01.05 11:05:

Советую перечитать топик, и попытаться понять в чем вопрос, прежде чем отвечать. Ок?
 
Это я про неправомочьность использования $_SERVER['REQUEST_METHOD'] для решения твоей задачи, которое вероятно(!) предлагает Screjet :)
 
Wicked
Ты не понял, это был вопрос ко мне, а не предложение. Думаю Screjet, как и я, знает, что метод запроса не говорит о том каким образом передаются данные.
 
Сверху