Перейти к основному содержимому

Типы данных в 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.