Почему ошибка синтаксического анализа возникает при использовании одной записи массива внутри строки в двойных кавычках, а не при использовании другой?

Рассмотрим код ниже:

<?php
   $arr = array('fruit' => 'apple', 'veggie' => 'carrot');

   define('fruit', 'veggie');

   print "Hello {$arr['fruit']}"; //This works

   print "Hello $arr['fruit']"; //This doesn't work
 ?>

Я не могу понять, почему второй не работает и выдает ошибку разбора следующим образом:

**Parse error:** syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)

Также, если я напишу выше программу, как показано ниже, то, если я добавлю die; после первой строки выполнения, а затем положить нерабочую строку, я получаю ту же ошибку.

 <?php
   $arr = array('fruit' => 'apple', 'veggie' => 'carrot');

   define('fruit', 'veggie');

   print "Hello {$arr['fruit']}";
   die;
   print "Hello $arr['fruit']";
 ?>

Я не получил это вообще. Он должен был напечатать первую строку, так как я умираю от кода, после которого строка, следующая за die, не должна учитываться при компиляции, но она учитывает и запрещает выполнение первой строки.

Почему так?

1 ответ

Решение

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

Во втором примере PHP интерпретирует $arr быть строкой, в которой скобки выполняют действие типа подстроки. В этом сценарии не должно быть одинарных кавычек, что вызывает ошибку разбора.

Что приводит нас к вашему второму вопросу: возникает ошибка синтаксического анализа, в то время как PHP пытается проанализировать ваш PHP-файл. Поскольку PHP еще не знает, что следует за оператором die (например, там может быть функция, которую вы будете вызывать из другой части скрипта), он должен анализировать каждую строку. Так что ошибка разбора пока не заботится о логике исполнения.

Другие вопросы по тегам