Ваше утверждение анализирует для людей следующим образом.
Выводит объединенную строку, состоящую из:
- Результат функции
print('3')
, которая будет возвращать true, которая преобразуется в 1
- Строка '2'
- Результат функции
print('4')
, которая будет возвращать true, которая преобразуется в 1
Теперь порядок операций здесь действительно забавный, который не может закончиться 43211
! Давайте попробуем вариант, чтобы выяснить, что происходит не так.
echo '1' . print('2') . '3' . print('4') . '5';
Это дает 4523111
PHP анализирует это, затем, как:
echo '1' . (print('2' . '3')) . (print('4' . '5'));
Бинго! print
слева оценивается первым, печатается '45'
, что оставляет нас
echo '1' . (print('2' . '3')) . '1';
Затем оценивается левый print
, поэтому мы напечатали '4523'
, оставив нам
echo '1' . '1' . '1';
Успех. 4523111
.
Давайте разберем ваше утверждение о странности.
echo print('3') . '2' . print('4');
Сначала будет напечатано '4'
, а у нас будет
echo print('3' . '2' . '1');
Затем вычисляется следующий оператор печати, что означает, что мы теперь напечатали '4321'
, оставив нам
echo '1';
Таким образом, 43211
.
Я бы настоятельно рекомендовал не echo
выводить результат print
или print
выводить результат echo
. Это очень бессмысленно для начала.
После дальнейшего рассмотрения я на самом деле не совсем уверен, как PHP анализирует эти биты чепухи. Я не буду больше думать об этом, это ранит мой мозг.