2013-04-29 3 views
0

Пусть следующий код:Echo и оператор печати

<?php 
echo 'hello' . print 123; 

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

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

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

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

+2

Извините. Я не прошу решения этой проблемы. Я хочу объяснить. Спасибо за помощь – sc1013

ответ

11
echo 'hello' . print 123; 

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

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

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

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

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

0

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

И почему выход содержит 1 в конце?
Поскольку «печать» возвращает 1, и эхо-эхо заявление о том, что «1»

1

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

Ваш код имеет конкатенации точечный характер:

'hello' . print 123; 

Таким образом, все части вычисляются до конкатенации:

  • 'привет' является 'привет'
  • печати 123: она отображает «123 'на экране и возвращает 1

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

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

Заключительная строка печатается на струны 123hello1.