W3docs

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

Float

Число с плавающей точкой (float) хранит число с десятичной точкой или показателем степени. Обратите внимание: числа с плавающей точкой являются приближёнными, поэтому никогда не сравнивайте их на точное равенство.

<?php
$price = 12.99;
$scientific = 1.2e3; // 1200
echo $price + $scientific; // 1212.99

Boolean

Логический тип (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.2

Object

Объект (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 и числовых строк — помогает избежать целого класса труднозаметных ошибок. Далее узнайте, как типы взаимодействуют с операторами и как хранить их в переменных.

Практика

Практика
Какие из следующих типов данных являются допустимыми в PHP?
Какие из следующих типов данных являются допустимыми в PHP?
Was this page helpful?