Почему "..." объединяет два числа в моем коде?

У меня есть следующий фрагмент кода, где я действительно не понимаю его вывод:

echo 20...7;

Почему этот код выводит 200.7?

Из того, что я знаю ... это оператор splat, который он вызывается в ruby, который позволяет вам иметь функцию с переменным числом аргументов, но я не понимаю, что она здесь делает в контексте с echo.

Может ли кто-нибудь объяснить, что именно делает этот код?

Ответ 1

Нет, это не оператор splat/unpacking, даже думал, что это может показаться. Это результат процесса разбора PHP. Уже написав свой код немного по-другому, вы можете устранить некоторую путаницу:

echo  20.           .           .7;
#       ↑           ↑           ↑
#    decimal  concatenation  decimal
#      dot         dot         dot

Теперь вы должны знать, что .7 равно 0.7 и вы можете опустить 0 в PHP, как описано в синтаксисе для чисел с плавающей запятой:

DNUM          ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)

Таким образом, PHP просто объединяет эти два числа вместе, и при этом жонглирование типа PHP беззвучно преобразует оба числа в строки.

Таким образом, ваш код эквивалентен:

echo "20" . "0.7";
//Output: "200.7"