Когда используется неопределенная константа, PHP автоматически предполагает, что строка предназначена. [так в оригинале]
PHP предполагает, что вы имеете в виду имя самой константы, как если бы
ты назвал это как строку
Пример: https://3v4l.org/C7PgT
Как отмечалось в PHP 7.x, это приведет к ОШИБКЕ, а не к предупреждению в будущих версиях, поэтому его следует избегать в пользу использования строк в кавычках
Почему $foo[bar]
не так: [sic]
Всегда используйте кавычки вокруг индекса строкового литерала. Например,
$foo['bar']
правильно, а $foo[bar]
- нет.
Причина в том, что этот код имеет неопределенную константу (bar
), а не строку ('bar'
- обратите внимание на кавычки).
если нет определенной константы с именем bar
, то PHP подставит в строку 'bar'
и будет использовать ее.
Это не значит всегда цитировать ключ. Не заключайте в кавычки ключи, которые являются константами или переменными, так как это помешает PHP интерпретировать их.
Когда вы использовали его в контексте двойных кавычек ("$var"
), лексер PHP автоматически использовал текст в скобках ($var[text]
) в виде строки.
Также у лексера PHP есть проблемы при использовании массива или объектов в двойных кавычках.
echo "value=$row['first_name']"; //results in a syntax error
Пример: https://3v4l.org/K6fUd
Чтобы решить эту проблему, вам нужно заключить массив в фигурные скобки
echo "value={$row['first_name']}";
Пример: https://3v4l.org/aQ1sJ
Вместо этого я настоятельно рекомендую использовать одинарные кавычки для всего вывода PHP, чтобы избавить вас от необходимости читать между различным синтаксисом и однородностью синтаксиса HTML.
foreach ($results as $row) {
echo '<form action="/test.php" method="post">
<input type="text" name="first_name" value="' . $row['first_name'] . '">
<input type="submit" value="Click"><br>
</form>';
}
В качестве альтернативы можно использовать HEREDOC или NOWDOC в зависимости от желаемого выхода.
foreach ($rows as $row) {
echo <<<EOT
value="{$row['first_name']}"
EOT;
}
Пример (включая HEREDOC): https://3v4l.org/7K5ap
Мой предпочтительный метод - убедиться, что весь синтаксис HTML выводится напрямую или в буфер вывода. Так как он позволяет большинству IDE, таким как PHPStorm, автоматически распознавать его как HTML, а не как PHP-код, чтобы обеспечить правильность синтаксиса HTML и совпадение с другими тегами.
<?php foreach ($results as $row) { ?>
<form action="/test.php" method="post">
<input type="text" name="first_name" value="<?php echo $row['first_name']; ?>">
<input type="submit" value="Click"><br>
</form>
<?php } ?>