Форумы портала PHP.SU » » Вопросы новичков » синтаксис $_POST

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

1. yogeswar - 08 Июня, 2018 - 09:19:50 - перейти к сообщению
Как правильно по синтаксису записать



Выдаёт ошибку:
Notice: Undefined index:
(Добавление)
$b - массив: $b = array(1=>'familiy',...)
for($x=2; $x<21; $x++){
echo $_POST[$b[$x]],'<br>';
}
2. Vladimir Kheifets - 08 Июня, 2018 - 14:59:41 - перейти к сообщению
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. Нужно ставить точку, а не запятую.
Попробуйте, сделать так:
Спойлер (Отобразить)
Удачи!
3. Строитель - 08 Июня, 2018 - 15:37:36 - перейти к сообщению
yogeswar, а $_POST тут зачем?
Спойлер (Отобразить)

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

Добрый день!
Согласен. Был, неправ, PHP-интерпретатор пропускает запятую в функции ECHO .
Оказывается, в функции ECHO запятая интерпретируется как разделитель параметров функции.
Как то, не очень чисто, если учесть, что в PRINT это не допускается.
Всегда использую оператор конкатенации, и в ECHO тоже.
Век живи век учись.
Спасибо!
5. Строитель - 09 Июня, 2018 - 18:22:47 - перейти к сообщению
Vladimir Kheifets пишет:
PHP-интерпретатор пропускает запятую в функции ECHO .
Оказывается, в функции ECHO запятая интерпретируется как разделитель параметров функции.
Как то, не очень чисто, если учесть, что в PRINT это не допускается.
Внесу немного ясности: echo это не функция, а конструкция языка, в то время как print именно функция. Разница между ними, как вы уже заметили, не существенная, но в некоторых выражениях она критична.

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


Это же относится и к выводу непосредственно из круглых скобок цикла for() (этот цикл можно использовать для вывода без его тела):
Спойлер (Отобразить)
Ну и ещё с помощью конструкции echo можно выводить сколько угодно параметров, перечисляя их через запятую, в то время как функция print не поддерживает подобное перечисление:
Спойлер (Отобразить)
Кстати, вариант echo $a, $b, $c; отработает быстрее, чем функция print с конкатенацией (лично я не проверял, знаю это в теории)
6. Мелкий - 09 Июня, 2018 - 20:44:44 - перейти к сообщению
Оба имеют собственные значения на уровне парсера и 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 всерьёз и даже поверхностно Закатив глазки
7. Строитель - 09 Июня, 2018 - 21:09:15 - перейти к сообщению
Мелкий, выходит, что print это тоже конструкция языка? Я вроде бы где-то видел утверждение, что это всё таки функция... Спасибо, приму к сведению.
8. Vladimir Kheifets - 11 Июня, 2018 - 10:58:38 - перейти к сообщению
Строитель пишет:
Мелкий, выходит, что 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.”
9. Строитель - 11 Июня, 2018 - 19:42:40 - перейти к сообщению
Vladimir Kheifets пишет:
Однако, у меня возник вопрос: “Откуда взялось это заблуждение?”
Я бы тоже хотел получить ответ на этот вопрос.

 

Powered by ExBB FM 1.0 RC1