Рассмотрим следующую строку кода:
<?php $x = 10; $y = 7; echo '10 - 7 = '.$x-$y; ?>
Результатом этого является 3, что является ожидаемым результатом вычисления $ x- $ y. Однако ожидаемый результат:
10 – 7 = 3
Поэтому мой вопрос заключается в том, что случилось со строкой, которую я конкатенирую с расчетом? Я знаю, что для того, чтобы добиться ожидаемого результата, мне нужно заключить арифметическую операцию в скобках:
<?php $x = 10; $y = 7; echo '10 - 7 = '.($x-$y); ?>
выходы
10 – 7 = 3
Но так как PHP не жалуется на исходный код, мне остается задаться вопросом, какова логика выпускаемой продукции в этом случае? Куда шла струна? Если кто-нибудь может объяснить это или указать мне на место в руководстве по PHP, где это объясняется, я был бы признателен.
Ваша строка '10 - 7 = '
объединяется с помощью $x
. Затем это интерпретируется как int
которое приводит к 10
а затем вычитается 7
, что приводит к 3
.
Для получения дополнительных пояснений попробуйте следующее:
echo (int) ('10 - 7 = ' . 10); // Prints "10"
Более подробную информацию о преобразовании строк в число можно найти по адресу http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion.
Если строка начинается с действительных числовых данных, это будет используемое значение
В этом коде:
echo '10 - 7 = '.$x-$y;
Конкатенация имеет приоритет, так что вы остались с этим:
echo '10 - 7 = 10'-$y;
Поскольку это пытается выполнить целочисленное вычитание со строкой, сначала строка преобразуется в целое число, поэтому у вас есть что-то вроде этого:
echo (int)'10 - 7 = 10'-$y;
Целочисленное значение этой строки равно 10
, поэтому полученная арифметика выглядит так:
echo 10-$y;
Поскольку $y
равно 7
и 10 - 7 = 3
, результат будет эхом: 3
.
.
и -
имеют одинаковый приоритет , поэтому PHP переинтерпретирует '10 - 7 = 10'
как число, давая 10
, а вычитание 7 дает 3
.