Заявление Echo и Print

Предположим, что следующий код:

<?php echo 'hello' . print 123; 

выполняется.

Я ожидаю hello123 , но фактический результат равен 123hello1 .

Почему 123 на первом месте? И почему вывод содержит 1 в конце?

(Я также попытался поставить пару круглых скобок вокруг hello , но все тот же результат.)

 echo 'hello' . print 123; 

Это объединяет 'hello' с возвращаемым значением print 123 . Прежде чем print вернет значение 1 , он выдает 123 . Конкатенированный hello1 выводится впоследствии echo . Таким образом, оценка такова:

  1. выход 123
  2. возвращение 1
  3. конкатенировать 'hello' и 1
  4. выходной hello1 .

В документации четко сказано, что функция print всегда будет возвращать 1.

Итак, как это происходит.

Выполнение функции печати -> Выход 123 -> return 1 -> concat с hello .

Возвращаемое значение печати всегда равно 1 .

У вашего кода есть символ конкатенации:

 'hello' . print 123; 

Итак, все части оцениваются до конкатенации:

  • «привет» – это «привет»,
  • print 123: отображает на экране «123» и возвращает 1

Затем эхо отображает оцененную строку:

 echo 'hello'.'1' // '1' is the return value of print 

Окончательная строка, напечатанная на строке, равна 123hello1 .

Почему 123 на первом месте?
Вероятно, потому что оператор печати сначала выполняется и печатает «123», как и следовало ожидать.

И почему вывод содержит 1 в конце?
Поскольку «print» возвращает 1, а echo statement echo – «1»,