Может ли кто-нибудь рассказать внутреннюю процедуру нижеследующего выражения?
<?php echo '2' . print(2) + 3; ?> // outputs 521
Эхо-конкатенированная строка, состоящая из:
Строка '2' Результат функции print ('2'), которая вернет true, которая будет стрифицирована до 1 Строка '3'
Теперь порядок операций действительно смешон здесь, и это не может быть вообще 521! Давайте попробуем вариант, чтобы понять, что происходит не так.
echo '2'.print (2) + 3; Это дает 521
PHP анализирует это, а затем:
echo '2'. (print ('2') + '3')) Бинго! Сначала напечатайте печать слева, напечатав «5», что оставляет нас
echo '1'. print ('2') Затем левая печать оценивается, поэтому мы теперь напечатали «52», оставив нас
echo '1'. '1'; Успех. 521.
Я бы предпочел не повторять результат печати и не печатать результаты эха. Для этого совершенно бессмысленно.
print
не является функцией, поэтому скобки не работают, как вы думаете. Он принимает значение выражения (2) + 3
( 5
) и выводит его. Он возвращает 1
сам, который сцеплен с '2'
, который затем echo
.
print(2) + 3
приведет к 5 (это то же самое, что и print (2 + 3)
или print 2+3
Так как печать в этом случае не является функцией, скобки в большинстве случаев бессмысленны. заключается в том, что print
получает оценку перед echo
.
До сих пор выход: 5
echo '2' . print
echo '2' . print
приведет к 21, потому что печать всегда возвращает 1
Теперь выведено: '521'
Сначала выполняется добавление 2 и 3, что приводит к 5, и это выводится.
Следующая печать возвращает 1
всегда. Это возвращаемое значение объединяется с 2
чтобы получить 21
который затем будет эхом.