Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вопрос по оператоу foreach
 
 автор: Владимир55   (07.06.2008 в 14:27)   письмо автору
 
 

В типовом скрипте встретил такую конструкцию:

foreach ($HTTP as $Key=>$Value) { $$Key = $Value; }

Возникает два вопроса.
1. Два знака $$ - это синтаксическая ошибка или это какой-то приём?
2. В чем может быть смысл этого кода?

   
 
 автор: LINKIN   (07.06.2008 в 14:28)   письмо автору
 
   для: Владимир55   (07.06.2008 в 14:27)
 

Видел, прием какой-то.

   
 
 автор: vitali   (07.06.2008 в 14:48)   письмо автору
 
   для: LINKIN   (07.06.2008 в 14:28)
 

Символическая ссылка ($$) , пример игрушки
<?
$run = "красный";
$blue ="синий";
$color = "run"; //символическая ссылка
echo "символическая ссылка color(run): ".$$color. " "; //выводит 'красный'
$$color = 'не синий';
echo "<br>Забавное Переопределение Запись \$\$color выводится как $$color и \$\$color = ".$$color; //получим $run = не синий
?>

   
 
 автор: Владимир55   (07.06.2008 в 14:49)   письмо автору
 
   для: LINKIN   (07.06.2008 в 14:28)
 

Полностью код выглядит так:

//Устанавливаем метод приема данных
if($SuccessMethod=='POST') $HTTP = $HTTP_POST_VARS;
else $HTTP = $HTTP_GET_VARS;
//Преобразуем массив в переменные
foreach ($HTTP as $Key=>$Value) { $$Key = $Value; }


Что он делает?

   
 
 автор: BinLaden   (07.06.2008 в 14:51)   письмо автору
 
   для: Владимир55   (07.06.2008 в 14:49)
 

Какое-то подобие эмуляции режима register_globals.

   
 
 автор: mihdan   (07.06.2008 в 15:34)   письмо автору
 
   для: Владимир55   (07.06.2008 в 14:49)
 

Не делайте так!

   
 
 автор: Владимир55   (07.06.2008 в 16:48)   письмо автору
 
   для: mihdan   (07.06.2008 в 15:34)
 

Этот код установлен в стандартном скрипте платёжной системы. Мне тоже не понравилась эта комбинация, хотя я и сам не знаю чем.

А что конкретно здесь некорректно?

   
 
 автор: BinLaden   (07.06.2008 в 16:52)   письмо автору
 
   для: Владимир55   (07.06.2008 в 16:48)
 

register_globals и, соответственно, все его эмуляции - считается устаревшим. Обращение к переменным, передаваемым методами POST/GET или через cookies, должно происходить через массивы $_POST, $_GET, $_COOKIE. В крайнем случае через $_REQUEST.

   
 
 автор: Владимир55   (07.06.2008 в 23:30)   письмо автору
 
   для: BinLaden   (07.06.2008 в 16:52)
 

Однако по другому решить задачу у меня не получается...

Получаемый массив $HTTP содержит непределенное количество переменных: $LMI_PAYMENT_NO, $LMI_SYS_INVS_NO, $LMI_SYS_TRANS_NO...

Как мне извлечь их из массива?

   
 
 автор: cheops   (08.06.2008 в 11:23)   письмо автору
 
   для: Владимир55   (07.06.2008 в 23:30)
 

Пользуйтесь на здоровье и таким способом, только помните, что любая из переменных, поступающих из формы, может быть подделана и её необходимо проверять соответствующим образом.

   
 
 автор: BinLaden   (08.06.2008 в 13:22)   письмо автору
 
   для: Владимир55   (07.06.2008 в 23:30)
 

> Как мне извлечь их из массива?

В принципе, для этого существует extract()

   
 
 автор: AcidTrash   (08.06.2008 в 00:03)   письмо автору
 
   для: BinLaden   (07.06.2008 в 16:52)
 

>считается устаревшим
Официально не слышал, чтобы кто-то устаривал. Если говорить насчет безопасности, то да.

   
 
 автор: BinLaden   (08.06.2008 в 13:17)   письмо автору
 
   для: AcidTrash   (08.06.2008 в 00:03)
 

> Официально не слышал, чтобы кто-то устаривал

http://php.net/manual/en/security.globals.php:

«This feature has been DEPRECATED and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged»

   
 
 автор: cheops   (08.06.2008 в 11:21)   письмо автору
 
   для: Владимир55   (07.06.2008 в 14:27)
 

>1. Два знака $$ - это синтаксическая ошибка или это какой-то приём?
Это динамическое формирование переменных.
>2. В чем может быть смысл этого кода?
Преобразование элементов ассоциативного массива в переменные.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования