Типы данных в PHP

Язык PHP использует динамическую типизацию, при которой тип значения определяется во время выполнения. PHP поддерживает строгую типизацию на уровне функций и файлов, но базовая модель остается динамической. Знание типов данных важно для корректной работы с памятью, арифметикой, сериализацией и взаимодействием с базами данных.

Скалярные типы данных

Скалярные типы представляют одиночные значения.

int (целые числа)

Тип int используется для хранения целых чисел.

$age = 25;
$negative = -10;

Диапазон зависит от архитектуры системы:

Архитектура Минимум Максимум
32-bit -2_147_483_648 2_147_483_647
64-bit -9_223_372_036_854_775_808 9_223_372_036_854_775_807

При выходе за пределы диапазона происходит преобразование в float.

float (числа с плавающей точкой)

Тип float используется для вещественных чисел.

$price = 19.99;
$temperature = -3.5;

Диапазон зависит от реализации IEEE 754:

Тип Приблизительный диапазон Точность
float (64-bit) ±1.7E-308 до ±1.7E+308 ~14-16 знаков

Важно учитывать погрешности округления:

echo 0.1 + 0.2; // 0.30000000000000004

string (строки)

Строки представляют последовательность байтов.

$name = "Alex";
$message = "Hello, world";

Диапазон строк зависит от памяти системы:

  • Максимальный размер ограничен только доступной памятью PHP
  • В 64-bit системах теоретически может достигать гигабайтов, но ограничивается memory_limit

PHP не использует отдельный char тип, символы представлены как строки длиной 1.

bool (логический тип)

Логический тип принимает только два значения:

$isActive = true;
$isDeleted = false;

Приведение к bool следует правилам:

Тип false значения
int 0
float 0.0
string "", "0"
array []
NULL всегда false

Составные типы данных

array (массивы)

Массивы могут быть индексированными и ассоциативными.

$numbers = [1, 2, 3, 4];

$user = [
    "name" => "John",
    "age" => 30
];

Особенности:

  • Поддержка смешанных типов
  • Хеш-табличная реализация
  • Упорядоченность сохраняется

Ограничения:

  • Максимальный размер ограничен памятью PHP
  • На практике — миллионы элементов при достаточной памяти

object (объекты)

Объекты используются в объектно-ориентированном программировании.

class User {
    public string $name;
}

$user = new User();
$user->name = "Alex";

Объекты в PHP хранятся как ссылки, а не копии.

Специальные типы данных

NULL

NULL означает отсутствие значения.

$value = null;

Особенности:

  • Единственное возможное значение типа NULL
  • Используется для неинициализированных переменных и пустых значений БД

resource

Resource представляет внешний ресурс.

$file = fopen("test.txt", "r");

Используется для:

  • файловых дескрипторов
  • соединений с БД
  • потоков

В современных версиях PHP многие resource заменены объектами (например, PDO).

Преобразование типов (type juggling)

PHP автоматически приводит типы:

$result = "10" + 5; // 15

Правила преобразования:

Исходный тип Результат в арифметике
string int или float (если возможно)
bool 0 или 1
null 0
array warning (в новых версиях)

Строгая типизация

PHP поддерживает строгую типизацию:

declare(strict_types=1);

function sum(int $a, int $b): int {
    return $a + $b;
}

При включении строгого режима:

  • запрещено неявное приведение типов в аргументах
  • возвращаемый тип проверяется строго

Типы в функциях и методах

function getUserName(array $user): string {
    return $user["name"];
}

Поддерживаемые типы:

  • scalar types (int, float, string, bool)
  • array
  • object
  • nullable types: ?int, ?string
function findUser(?int $id): ?array {
    return null;
}

Дополнительные важные нюансы

Переполнение int

$max = PHP_INT_MAX;

При превышении происходит автоматическое преобразование в float.

Проверка типа

is_int($value);
is_string($value);
is_array($value);

Также используется оператор:

var_dump(gettype($value));

Сравнение типов

0 == "0";  // true
0 === "0"; // false

Оператор === проверяет тип и значение одновременно.

Таблица типов PHP

Тип Категория Диапазон / особенности
int скалярный 32-bit или 64-bit
float скалярный ±1.7E±308
string скалярный ограничен памятью
bool скалярный true / false
array составной ограничен памятью
object составной ссылочный тип
NULL специальный одно значение
resource специальный системные ресурсы

Практические рекомендации

  • Использовать строгую типизацию в новых проектах
  • Проверять входные данные через типы функций
  • Избегать неявных преобразований в бизнес-логике
  • Использовать === вместо ==
  • Контролировать работу с float в финансовых расчетах
  • Проверять PHP_INT_MAX при работе с большими числами

Заключение

Типы данных в PHP формируют основу корректной работы приложений. Понимание диапазонов, поведения преобразований и различий между типами позволяет писать предсказуемый код и избегать ошибок, связанных с неявной типизацией и переполнениями.

  • 24.06.2026