Может ли кто-нибудь рассказать внутреннюю процедуру нижеследующего выражения?
<?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 который затем будет эхом.