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