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