Предположим, что следующий код:
<?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»,