Приведение типов в PHP
Содержание
Что такое динамическая типизация
PHP - язык с динамической типизацией. Это значит, что тип переменной можно изменить в любой момент работы скрипта. В некоторых других языках типизация строгая, т.е. переменная может менять значение, но не тип.
Динамическая типизация - это удобная штука, но её следствие - неочевидность при работе с переменными разных типов. Рассмотрим пример:
echo 2 * '11abc DEF 150';
Результатом работы скрипта будет 22
. Странно, да? Не менее странно, чем этот код, который почему-то возвращает true
:
var_dump(1 == '1abc'); // bool(true)
Дело в том, что некоторые функции и операторы перед началом вычислений автоматически приводят значения к определённым типам. Например:
// 10 - integer (целое число) $a = 10; // При умножении целого числа на дробное результат - дробное число $a = $a * 1.1; // На экран выведется double, т.е. дробное число echo gettype($a);
Итак, если мы умножаем целое число на дробное, то в результате мы получим дробное число, даже если у результата нет дробной части.
Приведение типов в PHP
В любой момент можно привести переменную к другому типу:
$var = 5; $var = (string) $var; // Теперь в переменной лежит строка '5' $var = (int) $var; // Теперь опять целое число $var = (float) $var; // Теперь дробь 5 $var = (bool) $var; // Теперь true
Арифметические операции со строками
Если попытаться совершить арифметическую операцию со строкой, PHP сначала приводит строку к числу.
Делает он это не совсем очевидным образом: число будет получено из первых числовых символов. Как только будет встречен первый нечисловой символ - остальная строка отбросится:
echo '12abc' + 2; /* 1. PHP пытается превратить '12abc' в число. 2. В итоге '12abc' превратится в число 12 3. Результатом вычислений будет 12 + 2 = 14 */
Приведение к булеву типу
Когда вы пытаетесь привести значение к булеву типу, следующие значения приведутся к false
:
0
- целое или дробное
- пустая строка
''
- строка с числом 0
'0'[]
- пустой массив
null
Все остальные значения приводятся к true
.