Типы данных PHP
Изучите восемь типов данных PHP: int, float, bool, string, array, object, null и resource — с примерами, проверкой типов и правилами приведения.
Тип данных описывает, какое значение хранит переменная и какие операции над ним допустимы. PHP является динамически типизированным языком: объявлять тип не нужно — достаточно присвоить значение, и PHP определит тип автоматически. Одна и та же переменная может даже менять тип в ходе выполнения скрипта. Понимание восьми встроенных типов — и правил преобразования между ними — это основа для написания предсказуемого PHP-кода.
В этой главе рассматриваются все типы PHP, способы определения типа значения во время выполнения и правила приведения типов, на которых чаще всего спотыкаются новички.
Восемь типов данных PHP
В PHP есть восемь примитивных типов, разделённых на три семейства:
| Семейство | Типы |
|---|---|
| Скалярные (одно значение) | int, float, bool, string |
| Составные (коллекции) | array, object |
| Специальные | null, resource |
Узнать тип любого значения можно с помощью функции gettype(), а проверить конкретный тип — с помощью функций is_int(), is_string() или is_null().
<?php
$value = 42;
echo gettype($value); // integer
$value = "now I'm a string";
echo PHP_EOL . gettype($value); // stringСкалярные типы
Скалярные типы хранят одно значение.
Integer
Целое число (integer) — это целое число, положительное или отрицательное, без десятичной точки. Подробнее читайте в разделе Числа в PHP.
<?php
$num = 42; // decimal
$negative = -7;
$hex = 0x1A; // hexadecimal (26)
$binary = 0b101; // binary (5)
echo "$num $negative $hex $binary"; // 42 -7 26 5Float
Число с плавающей точкой (float) хранит число с десятичной точкой или показателем степени. Обратите внимание: числа с плавающей точкой являются приближёнными, поэтому никогда не сравнивайте их на точное равенство.
<?php
$price = 12.99;
$scientific = 1.2e3; // 1200
echo $price + $scientific; // 1212.99Boolean
Логический тип (boolean) принимает только значения true или false. Именно этот тип возвращают операции сравнения и используют условные конструкции вроде if.
<?php
$isActive = true;
$hasError = false;
var_dump($isActive); // bool(true)String
Строка (string) — это последовательность символов. В строках с двойными кавычками переменные интерполируются; в строках с одинарными кавычками — нет. Подробнее читайте в разделе Строки PHP.
<?php
$name = "John";
echo "Hello, $name!"; // Hello, John!
echo PHP_EOL . 'Hello, $name!'; // Hello, $name! (no interpolation)Составные типы
Составные типы объединяют несколько значений.
Array
Массив хранит упорядоченную карту пар ключ/значение в одной переменной. В современном PHP используйте краткий синтаксис [].
<?php
$fruits = ["apple", "banana", "cherry"];
$prices = ["apple" => 1.20, "banana" => 0.50]; // associative
echo $fruits[1]; // banana
echo PHP_EOL . $prices["apple"]; // 1.2Object
Объект (object) — это экземпляр класса, объединяющий данные (свойства) и поведение (методы). Создаётся с помощью ключевого слова new.
<?php
class Person {
public function __construct(public string $name) {}
public function greet(): string {
return "Hi, I'm {$this->name}";
}
}
$person = new Person("Ada");
echo $person->greet(); // Hi, I'm AdaСпециальные типы
NULL
null представляет переменную, не имеющую значения. Переменная равна null, если ей явно присвоена константа null, если она ещё не была задана или если была сброшена с помощью unset(). Для проверки используйте is_null() или === null.
<?php
$age = null;
var_dump(is_null($age)); // bool(true)Resource
Ресурс (resource) — это специальная переменная, хранящая ссылку на внешний объект: открытый файл или соединение с базой данных. Ресурсы не создаются напрямую — их возвращают функции вроде fopen(). Ресурсы освобождаются автоматически, когда перестают использоваться.
Приведение типов и жонглирование типами
Поскольку PHP динамически типизирован, он автоматически преобразует («жонглирует») типы, когда это требует операция. Например, числовая строка становится числом при арифметических вычислениях:
<?php
$result = "5" + 3; // the string "5" is converted to int 5
echo $result; // 8Строка, которая лишь начинается с цифр (например, "5 apples"), вызывает предупреждение в современном PHP, поэтому лучше преобразовывать явно с помощью приведения типов.
Когда необходим явный контроль, приведите значение к нужному типу, указав его в скобках:
<?php
$text = "12.99";
$asFloat = (float) $text; // 12.99 as a float
$asInt = (int) $text; // 12 (truncated)
var_dump($asInt); // int(12)Обратите внимание на логическое приведение: при преобразовании в bool значения 0, 0.0, "", "0", [] и null дают false; практически всё остальное — true.
<?php
var_dump((bool) "0"); // bool(false)
var_dump((bool) "0.0"); // bool(true) — surprising!Когда какой тип использовать
- Используйте int/float для количественных данных и математики; для форматирования обратитесь к вспомогательным функциям из раздела Числа PHP.
- Используйте string для текста и идентификаторов.
- Используйте bool для флагов и результатов сравнений.
- Используйте array для хранения списков или карт связанных значений.
- Используйте object для моделирования реальных сущностей, имеющих как данные, так и поведение.
- Используйте null, чтобы обозначить «значение ещё не задано», вместо искусственных заглушек вроде
0или"".
Итоги
PHP автоматически определяет тип значения по присвоенному данному и поддерживает восемь типов из семейств скалярных, составных и специальных. Проверяйте типы с помощью gettype() и функций is_*, а управляйте преобразованиями с помощью явного приведения. Освоение жонглирования типами — особенно правил для bool и числовых строк — помогает избежать целого класса труднозаметных ошибок. Далее узнайте, как типы взаимодействуют с операторами и как хранить их в переменных.