PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: $_POST от переменной
yogeswar
Отправлено: 08 Июня, 2018 - 09:19:50
Post Id


Гость


Покинул форум
Сообщений всего: 99
Дата рег-ции: Сент. 2012  
Откуда: Екатеринбург


Помог: 0 раз(а)




Как правильно по синтаксису записать



Выдаёт ошибку:
Notice: Undefined index:
(Добавление)
$b - массив: $b = array(1=>'familiy',...)
for($x=2; $x<21; $x++){
echo $_POST[$b[$x]],'<br>';
}
 
 Top
Vladimir Kheifets
Отправлено: 08 Июня, 2018 - 14:59:41
Post Id



Частый гость


Покинул форум
Сообщений всего: 244
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 9 раз(а)




yogeswar пишет:
Как правильно по синтаксису записать

Выдаёт ошибку:
Notice: Undefined index:
(Добавление)
$b - массив: $b = array(1=>'familiy',...)
for($x=2; $x<21; $x++){
echo $_POST[$b[$x]],'<br>';
}

Добрый день!
Дело не в синтаксе $_POST, а в массиве $b, в котором, говорят Undefined index.
Вообщето-то, по синтаксису, следующая ошибка будет в echo. Нужно ставить точку, а не запятую.
Попробуйте, сделать так:
Спойлер (Отобразить)
Удачи!

(Отредактировано автором: 08 Июня, 2018 - 15:06:53)

 
 Top
Строитель Модератор
Отправлено: 08 Июня, 2018 - 15:37:36
Post Id



Участник


Просматривает форум
Сообщений всего: 1257
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 51 раз(а)




yogeswar, а $_POST тут зачем?
Спойлер (Отобразить)

(Добавление)
Vladimir Kheifets пишет:
Вообщето-то, по синтаксису, следующая ошибка будет в echo. Нужно ставить точку, а не запятую.
Ошибаетесь, оператор echo допускает и точку, и запятую.
 
 Top
Vladimir Kheifets
Отправлено: 09 Июня, 2018 - 15:52:41
Post Id



Частый гость


Покинул форум
Сообщений всего: 244
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 9 раз(а)




Vladimir Kheifets пишет:
Вообщето-то, по синтаксису, следующая ошибка будет в echo. Нужно ставить точку, а не запятую.
Строитель пишет:
Ошибаетесь, оператор echo допускает и точку, и запятую.

Добрый день!
Согласен. Был, неправ, PHP-интерпретатор пропускает запятую в функции ECHO .
Оказывается, в функции ECHO запятая интерпретируется как разделитель параметров функции.
Как то, не очень чисто, если учесть, что в PRINT это не допускается.
Всегда использую оператор конкатенации, и в ECHO тоже.
Век живи век учись.
Спасибо!
 
 Top
Строитель Модератор
Отправлено: 09 Июня, 2018 - 18:22:47
Post Id



Участник


Просматривает форум
Сообщений всего: 1257
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 51 раз(а)




Vladimir Kheifets пишет:
PHP-интерпретатор пропускает запятую в функции ECHO .
Оказывается, в функции ECHO запятая интерпретируется как разделитель параметров функции.
Как то, не очень чисто, если учесть, что в PRINT это не допускается.
Внесу немного ясности: echo это не функция, а конструкция языка, в то время как print именно функция. Разница между ними, как вы уже заметили, не существенная, но в некоторых выражениях она критична.

Например, в сокращённых выражениях тернарного оператора, для вывода данных вы не сможете использовать конструкцию echo, но вполне сможете использовать функцию print (скобки не обязательны):
Спойлер (Отобразить)


Это же относится и к выводу непосредственно из круглых скобок цикла for() (этот цикл можно использовать для вывода без его тела):
Спойлер (Отобразить)
Ну и ещё с помощью конструкции echo можно выводить сколько угодно параметров, перечисляя их через запятую, в то время как функция print не поддерживает подобное перечисление:
Спойлер (Отобразить)
Кстати, вариант echo $a, $b, $c; отработает быстрее, чем функция print с конкатенацией (лично я не проверял, знаю это в теории)
 
 Top
Мелкий Супермодератор
Отправлено: 09 Июня, 2018 - 20:44:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 11678
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 584 раз(а)




Оба имеют собственные значения на уровне парсера и AST... И потому и echo и print не являются функциями.
Токен T_ECHO проходит по классу statement и требует указание своего собственного echo_expr_list https://github[dot]com/php/php-src/b[dot][dot][dot]ge_parser[dot]y#L439
Токен T_PRINT относится к классу expr_without_variable https://github[dot]com/php/php-src/b[dot][dot][dot]ge_parser[dot]y#L976

А вот отсюда по ZEND_AST_* коду от парсера через zend_compile_print и zend_compile_echo соответственно обе конструкции получают какую-то очень уж похожую реализацию в опкод ZEND_ECHO.

Впрочем я не копал Zend всерьёз и даже поверхностно Закатив глазки


-----
PostgreSQL DBA
 
 Top
Строитель Модератор
Отправлено: 09 Июня, 2018 - 21:09:15
Post Id



Участник


Просматривает форум
Сообщений всего: 1257
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 51 раз(а)




Мелкий, выходит, что print это тоже конструкция языка? Я вроде бы где-то видел утверждение, что это всё таки функция... Спасибо, приму к сведению.
 
 Top
Vladimir Kheifets
Отправлено: 11 Июня, 2018 - 10:58:38
Post Id



Частый гость


Покинул форум
Сообщений всего: 244
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 9 раз(а)




Строитель пишет:
Мелкий, выходит, что print это тоже конструкция языка? Я вроде бы где-то видел утверждение, что это всё таки функция... Спасибо, приму к сведению.

Доброе утро!
Выходит, что echo и print это конструкции языка, а не функции. Спасибо за информацию.
Однако, у меня возник вопрос: “Откуда взялось это заблуждение?”
Посмотрел, на http://php.net/manual/ru/langref.php
Открываем “Управляющие конструкции”. Предположим, что это синоним “конструкции языка
Здесь echo и print не упоминается.
Спойлер (Отобразить)
Смотрим раздел “Функции” и в нём подраздел “Функции для работы со строками
Здесь находим echo и print
Спойлер (Отобразить)
По линку из списка “Функции для работы со строками” смотрим описания echo и print и узнаём, что они на самом деле не функции , а конструкции:
Спойлер (Отобразить)
Посмотрел, что пишут на https://github[dot]com/dseguy/clearP[dot][dot][dot]age-construct[dot]md
про конструкции языка PHP: “The language constructs are echo, print, include, include_once, require and require_once.”

(Отредактировано автором: 11 Июня, 2018 - 11:05:36)

 
 Top
Строитель Модератор
Отправлено: 11 Июня, 2018 - 19:42:40
Post Id



Участник


Просматривает форум
Сообщений всего: 1257
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 51 раз(а)




Vladimir Kheifets пишет:
Однако, у меня возник вопрос: “Откуда взялось это заблуждение?”
Я бы тоже хотел получить ответ на этот вопрос.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB