Автоматическое преобразование типов в PHP

Как вы уже знаете, строки в 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, а не ошибку ?>