Предположим, что следующий код:
<?php echo 'hello' . print 123;
выполняется.
Я ожидаю hello123
, но фактический результат равен 123hello1
.
Почему 123 на первом месте? И почему вывод содержит 1
в конце?
(Я также попытался поставить пару круглых скобок вокруг hello
, но все тот же результат.)
echo 'hello' . print 123;
Это объединяет 'hello'
с возвращаемым значением print 123
. Прежде чем print
вернет значение 1
, он выдает 123
. Конкатенированный hello1
выводится впоследствии echo
. Таким образом, оценка такова:
123
1
'hello'
и 1
hello1
. В документации четко сказано, что функция print
всегда будет возвращать 1.
Итак, как это происходит.
Выполнение функции печати -> Выход 123
-> return 1
-> concat с hello
.
Возвращаемое значение печати всегда равно 1 .
У вашего кода есть символ конкатенации:
'hello' . print 123;
Итак, все части оцениваются до конкатенации:
Затем эхо отображает оцененную строку:
echo 'hello'.'1' // '1' is the return value of print
Окончательная строка, напечатанная на строке, равна 123hello1
.
Почему 123 на первом месте?
Вероятно, потому что оператор печати сначала выполняется и печатает «123», как и следовало ожидать.
И почему вывод содержит 1 в конце?
Поскольку «print» возвращает 1, а echo statement echo – «1»,