Типы данных
У каждого значения в PHP есть тип: число, строка, логическое значение и так далее. Тип определяется автоматически по самому значению, а переменная может в разное время хранить значения разных типов.
Основные типы
| Тип | Пример | Описание |
|---|---|---|
string | 'текст' | Строка |
int | 42 | Целое число |
float | 3.14 | Дробное число |
bool | true | Истина или ложь |
array | [1, 2, 3] | Набор значений |
null | null | Отсутствие значения |
Как узнать тип
Функция var_dump() выводит тип и значение. Она незаменима при отладке, когда нужно понять, что на самом деле лежит в переменной:
<?php
var_dump('текст'); // string(10) "текст"
var_dump(42); // int(42)
var_dump(3.14); // float(3.14)
var_dump(true); // bool(true)Число в скобках у строки — её длина в байтах. В кодировке UTF-8 кириллическая буква занимает два байта, поэтому у слова из пяти букв длина 10.
Целые и дробные числа
Деление всегда даёт дробный результат, если числа не делятся нацело. Для целочисленного деления есть функция intdiv():
<?php
var_dump(10 / 4); // float(2.5)
var_dump(intdiv(10, 4)); // int(2)Дробные числа хранятся приближённо, поэтому сравнивать их на точное равенство нельзя:
<?php
var_dump(0.1 + 0.2 == 0.3); // bool(false)Это особенность почти всех языков программирования, а не ошибка PHP.
Приведение типов
Тип можно изменить явно, указав нужный в скобках перед значением:
<?php
var_dump((int) '42'); // int(42)
var_dump((int) '12abc'); // int(12)
var_dump((string) 3.14); // string(4) "3.14"
var_dump((bool) ''); // bool(false)При преобразовании в bool ложью считаются 0, 0.0, пустая строка, строка '0', пустой массив и null. Всё остальное — истина.
Строгое и нестрогое сравнение
Оператор == перед сравнением приводит значения к одному типу, а === сравнивает и значение, и тип:
<?php
var_dump('5' == 5); // bool(true)
var_dump('5' === 5); // bool(false)Нестрогое сравнение часто даёт неожиданные результаты, поэтому по умолчанию используйте ===.