Арифметическая операция в конкатенации строк без круглых скобок вызывает странный результат

Рассмотрим следующую строку кода:

<?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 .