Типы данных в PHP
PHP поддерживает десять примитивных типов.
Скалярные типы
- bool: Логический тип (true или false).
- int: Целое число.
- float: Число с плавающей точкой (десятичное число). Важно: Числа с плавающей точкой имеют ограниченную точность и хранятся в двоичном формате (IEEE 754). Сравнивать их на равенство ненадёжно (например,
0.1 + 0.2 != 0.3). Для точных вычислений (например, с деньгами) используйтеBCMathв PHP иDECIMALв базах данных. Подробнее о числах с плавающей точкой - string: Последовательность символов.
Составные типы
- array: Упорядоченная карта, связывающая значения с ключами.
- object: Экземпляр класса.
- callable: Тип, который может быть вызван как функция.
- iterable: Любой тип, по которому можно итерироваться с помощью
foreach(массив или объект, реализующийTraversable).
Специальные типы
- resource: Специальная переменная, содержащая ссылку на внешний ресурс (например, соединение с базой данных, файловый дескриптор).
- null: Переменная, не имеющая значения.
Преобразование типов
PHP — язык со слабой типизацией, но приведение типов можно выполнить с помощью (int), (bool), (float), (string), (array), (object).
$foo = "10";
$bar = (int)$foo; // $bar теперь целое число 10
Специальные значения, считающиеся FALSE
При преобразовании в логический тип следующие значения равны false:
- логическое значение
false - целые числа
0и-0 - числа с плавающей точкой
0.0и-0.0 - пустая строка
""и строка"0" - массив с нулём элементов
- тип
NULL - объект
SimpleXML, созданный из пустых тегов
Передача по ссылке
Переменные можно передавать по ссылке, добавляя к ним префикс &. В некоторых случаях, например при передаче аргумента в функцию, это гарантирует, что функция изменит исходную переменную.
Примечание: в современном PHP нельзя задать значение по умолчанию для параметра, передаваемого по ссылке (поскольку это указатель на переменную).
Указание типов и строгая типизация
- Скалярные указатели типов: Появились в PHP 7, позволяют указывать ожидаемый тип параметров и возвращаемых значений.
declare(strict_types=1);: Включает строгую типизацию — PHP выброситTypeError, если типы не совпадают точно (вместо автоматического приведения).
Union, Intersection и DNF типы
- Union Types (PHP 8.0): Позволяют указать несколько типов для одной переменной/возвращаемого значения.
string|int. - Intersection Types (PHP 8.1): Требуют одновременного соответствия нескольким типам (интерфейсам/классам).
Countable&Iterator. - DNF Types (PHP 8.2): Дизъюнктивная нормальная форма — позволяет комбинировать Intersection и Union типы.
(Countable&Iterator)|null.