Как вы уже знаете, строки в PHP следует брать в кавычки. Может быть такое, что всеми символами строки будут являться цифры. В этом случае, если над строкой с цифрами выполнить какую-либо математическую операцию - эта операция будет выполнена так, будто у нас действительно числа, а не строки:
<?php
echo '1' + '2'; // выведет 3
?>
В данном случае PHP видит, что мы пытаемся выполнить недопустимую для строк, но допустимую для чисел операцию. Он также видит, что фактически наши строки - это числа в кавычках. Поэтому PHP автоматически выполняет преобразование этих строк к чисел и выполняет соответствующую математическую операцию над ними.
Аналогичным образом будет происходить сложение строки с цифрами и обычного числа:
<?php
echo '1' + 2; // выведет 3
?>
При этом не будет иметь значения, в каком порядке выполнять сложение:
<?php
echo 1 + '2'; // выведет 3
?>
Все сказанное будет аналогичным образом работать и для переменных:
<?php
$a = '1';
$b = '2';
echo $a + $b; // выведет 3
?>
Не запуская код, определите, что выведется на экран:
<?php
$a = '1';
$b = '2';
echo $a + $b + '3';
?>
Преобразование к строке
Аналогичное преобразование будет происходить с числами, над которыми мы пытаемся выполнить операцию, разрешенную только для строк:
<?php
echo 1 . 2; // выведет '12'
?>
Но тут есть нюансы. Точка используется не только для сложения строк, но и для отделения дробной части от целой. Поэтому, если в нашем коде убрать пробелы вокруг точки, мы получим дробь, а не сложение строк:
<?php
echo 1.2; // выведет 1.2
?>
Из-за таких нюансов можно легко получить ошибку, если с одной стороны точки поставить пробел, а с другой - нет:
<?php
echo 1. 2; // выдаст ошибку
?>
С переменными, однако, такой проблемы не будет:
<?php
$a = '1';
$b = '2';
echo $a.$b; // выведет 12, а не ошибку
?>