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