Почему 1 ... 1 оценивается в 10.1? [дубликат]
этот вопрос уже есть ответ здесь:
Я только что столкнулся с небольшим фрагментом PHP из 3v4l:https://3v4l.org/jmrZB
echo 1...1; //10.1
и я боюсь, что я не знаю, как объяснить его результаты. Почему это считается действительным на все?
4 ответа:
точка (
.
) имеет две роли в PHP:
- как десятичная цифра, когда она является частью реального числа, например
1.1
. Как целая часть, так и десятичная часть являются необязательными для действительных чисел но не в одно и то же время. Это означает, что оба1.
и.1
действительны действительные числа в PHP, но.
- Это не число.- как оператор конкатенации строк. Этот оператор соединяет два строковых подвыражения в a более широкое выражение лица. Значение большего выражения является конкатенацией строковых значений вложенных выражений. Вложенные выражения, которые не являются строками, преобразуются в строки перед конкатенацией.
Е. Г.1 . 1
это то же самое, что'1' . '1'
и его значение-строка'11'
.выражение
1...1
анализируется как1. . .1
. Согласно сказанному выше,1.
и.1
- это реальные цифры (1.0
и0.1
) и средняя точка (.
) is оператор конкатенации строк.при преобразовании чисел в строки PHP использует минимальное количество символов, необходимое для этой операции. Если действительное число имеет только интегральную часть, то оно представляет число как целое, без десятичной точки и десятичных знаков.
вот почему
1. . .1
это то же самое, что'1' . '0.1'
и конечное значение выражения10.1
.почему
1...1
проанализированный таким образом?парсер читает выражение слева направо.
1
говорит, что там начинается число.1.
является допустимым вещественным числом, но1..
нет. Он держит1.
как число, то следующая точка-это оператор конкатенации. Следующий.
, за которым следует цифра, является началом другого действительного числа (.1
).все
1...1
это то же самое, что1. . .1
.
применение фигурных скобок даст понять:
(1.) . (.1)
1.
трактуется как1
.
- строка объединение.1
трактуется как0.1
это все положить в строку
10.1
в строке.
var_dump(1...1)
доходностьstring(4) "10.1"
Различные Операции.
1. <?php echo 1.1; ?> // gives simple 1.1 2. <?php echo 1...1; ?> // gives 10.1 3. <?php echo 1..'1'; ?> // gives 11 4. <?php var_dump(1.); ?> // gives 1 5. <?php var_dump(.1); ?> // gives 0.1
теперь наша странная операция
echo 1...1
рассматривается как конкатенация no 4 и no 5, что приводит к 10.1