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

Форум PHP

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

 

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

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

тема: поясните код
 
 автор: moonfox   (25.05.2005 в 06:05)   письмо автору
 
 

foreach($_POST as $key=>$val){ $$key = $val; }
foreach($_GET as $key=>$val){ $$key = $val; }

в коментариях было написано что дает доступ ко всем переменным типа пост и гет
как этим пользоваться?
что за key и val?

   
 
 автор: glsv (Дизайнер)   (25.05.2005 в 07:57)   письмо автору
 
   для: moonfox   (25.05.2005 в 06:05)
 

Этот прием имет значение только для выключенной директове register_globals.
В противном случае, такие преобразования производятся автоматически.

Переменные, переданные методом POST заносятся в массив POST, например:
Из формы методом POST было передано 2 переменных с именами var1 и var2. Это можно сэмулировать следующим образом

<?
  $_POST
["var1"]=3;
  
$_POST["var2"]="Вася пошел в магазин";
?>

После применение вот такой конструкции

<?
foreach($_POST as $key=>$val)

  $
$key $val
}
?>

будут созданы переменные

<?
  $var1
=3;
  
$var2="Вася пошел в магазин";
?>

которых раньше не существовало (если выключена директива register_globals)
Таким образом, к переменным можно обращаться не через массив $_POST, а непосредственно по их имени. Это несколько удобней.

>что за key и val?
В переменную $key заносятся ключи массива $_POST - это то, что в квадратных скобках. А в переменную $val заносятся значения.

<?
  $_POST
["var1"]=3;
  
$_POST["var2"]="Вася пошел в магазин";
?>


http://www.softtime.ru/bookphp/gl4_2.php

   
 
 автор: antf   (25.05.2005 в 08:09)   письмо автору
 
   для: moonfox   (25.05.2005 в 06:05)
 

1) Допустим у вас два поля

<form action='myscript' method='POST'>
  <input type='text' name='surname' value=''>
  <input type='text' name='name' value=''>
  <input type='submit' name='add_name' value='Добавить'>
</form>

2) После щелчка на кнопке "Добавить", все данные формы передаются в скрипт myscript.php. Они помещаются в суперглобальный массив $_POST (В переменной $_POST['name'] будет значение текстового поля name). Конструкция

foreach($_POST as $key=>$val)


последовательно перебирает все элементы массива $_POST[], сохраняя ключ элемента ( surname, name) в переменной $key, а значение в переменной $val (например 'Иван', 'Белов').

3)
$$key = $val      

Данная конструкция читается так: переменной с именем $key присвоить значение равное $val. В нашем примере получается две переменных $surname и $name. То есть если $key будет равно 'name', создается переменная с именем name и ей присваивается значение 'Белов'. Такая конструкция называется динамическая переменная.
PS Я сам часто использую такой способ. Перед foreach советую поставить комментарий, содержащий список переменных, которые у вас получаются.

   
 
 автор: antf   (25.05.2005 в 08:25)   письмо автору
 
   для: antf   (25.05.2005 в 08:09)
 

Ой, а я ответ в offline редактировал и не заметил сообщение Дизайнера :-)

   
 
 автор: moonfox   (26.05.2005 в 05:55)   письмо автору
 
   для: antf   (25.05.2005 в 08:25)
 

ешо 1 вопросик:)
а есть ли разница меж данным подходом и простым обращением непосредственно к переменным через масивы пост и гет
$var=$_POST['qqq'];

   
 
 автор: glsv (Дизайнер)   (26.05.2005 в 06:21)   письмо автору
 
   для: moonfox   (26.05.2005 в 05:55)
 

Разницы нет. Подробнее об этом вопросе: почему стало необходимо пользоваться массивами POST и GET можно почитать по ссылке.

http://www.softtime.ru/info/articlephp.php?id_article=13

   
 
 автор: PHPFan   (15.06.2005 в 20:52)   письмо автору
 
   для: glsv (Дизайнер)   (26.05.2005 в 06:21)
 

Хочу написать небольшой модуль для вывода простейшего линейного графика. Опыта в этом деле нет. Подсмотренные чужие модули реализованны на классах.
Вот отрывки кода:

class PhpBarGraph
{
   var $_image; 
.....
   function SetShowLabels($labels)
   {
      $this->_showLabels = $labels;
   }
......
         $x1 = $this->_leftMargin + 1 + (($i-1) * $this->_barWidth) + ($i * $this->_barSpacing);
         $y1 = $this->_height - $this->_bottomMargin - 1 - ($myBarheight);
         $x2 = $this->_leftMargin + (($i-1) * $this->_barWidth) + ($i * $this->_barSpacing) + $this->_barWidth;
         $y2 = $this->_height - $this->_bottomMargin - 1;
.........
}

там много чего :)
Вопросы вот какие:
1) Почему используются именно class (а не не function, к примеру). Какие преимущества это даёт?
2) Нигде в мануалах не описано что обозначает " ->". Какое дествие выполняет код
 function SetShowLabels($labels)
   {
      $this->_showLabels = $labels;
   }

находясь внутри класса?
Объясните пожалуйста.

   
 
 автор: cheops   (15.06.2005 в 21:09)   письмо автору
 
   для: PHPFan   (15.06.2005 в 20:52)
 

1) Классы призваны облегчить создание Web-приложений больших объёмов, так как реально такие приложения встречаются редко вы можете прибегнуть к функциям, что при малых объёмах кода, даже нагляднее
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=641
http://www.softtime.ru/forum/]read.php?id_forum=1&id_theme=3061
2) Это код обращается к члену класса $_showLabels, если не использовать $this-> то будте создана новая переменная.

   
 
 автор: PHPFan   (15.06.2005 в 21:22)   письмо автору
 
   для: cheops   (15.06.2005 в 21:09)
 

Большое спасибо. Насколько понял классы нужны лишь при реально больших объёмах кода, для того чтоб методом наследования эволюционно продвигать php скрипт :)
Думаю, в моём случае будет разумнее и проще обойтись процедурным программированием.
ps Хотя чисто для тренировки лучше сделать класс.

   
Rambler's Top100
вверх

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