Типы данных PHP: от простого к сложному

Раздел: Разработка на PHP -> Основы PHP

Основные типы данных и их применение

PHP поддерживает несколько базовых типов данных: int (целые числа), float (числа с плавающей точкой), string (строки), bool (логический тип), array (массивы), object (объекты), null (отсутствие значения), resource (внешние ресурсы) и callable (вызываемые сущности). Каждый тип имеет свои особенности и методы работы.

Пример создания переменных разных типов:

$intVar = 42;          // int
$floatVar = 3.14;      // float
$stringVar = "Привет"; // string
$boolVar = true;       // bool
$arrayVar = [1, 2, 3]; // array
$nullVar = null;       // null

Проверить тип переменной можно с помощью функций gettype() или is_тип() (например, is_int, is_string).

$value = 123;
echo gettype($value); // integer
var_dump(is_int($value)); // bool(true)

Типичная ошибка: при сравнении переменных разных типов PHP выполняет неявное приведение, что может привести к неожиданным результатам. Например:

var_dump(0 == '0');   // true
var_dump(0 == 'abc'); // true (так как 'abc' приводится к 0)
var_dump('123' == 123); // true

Для строгого сравнения используйте оператор === (тройное равно), который сравнивает и значение, и тип.

Как явно преобразовать один тип в другой?

Приведение типов выполняется с помощью конструкций (int), (string), (bool) и других, а также функций intval(), strval() и т.д.

$number = "42.7";
$intNumber = (int)$number; // 42 (дробная часть отбрасывается)
$floatNumber = (float)$number; // 42.7
$boolValue = (bool)$number; // true (непустая строка)
echo "$intNumber, $floatNumber, ".($boolValue?'true':'false');

Проблема: при приведении строки к целому числу PHP берёт начальную цифровую часть и игнорирует остальное. Если строка не начинается с числа, результат будет 0.

echo (int)"abc123"; // 0

Какие типы данных появились в PHP 8?

Начиная с PHP 8 были введены union types (объединение типов), mixed, never, false и null как самостоятельные типы для объявлений.

function process(int|string $value): int|string {
    return $value;
}

function neverReturns(): never {
    exit();
}

Ошибка: при использовании union types нужно учитывать порядок приоритетов при приведении. Например, если передать null в функцию с типом int|string, это вызовет ошибку, если не добавить null в объединение.

Расширенные примеры работы с типами

1. Использование resource и его освобождение

Пример
$file = fopen('test.txt', 'r');
if (is_resource($file)) {
    echo "Ресурс открыт";
    fclose($file);
}
Ресурс открыт

2. Callable тип: вызов функции через переменную

Пример
function square($x) { return $x * $x; }
$func = 'square';
echo $func(5); // 25
// Анонимная функция как callable
$double = function($x) { return $x * 2; };
echo $double(3); // 6

3. Nullable типы (PHP 7.1+)

Пример
function findUser(int $id): ?User {
    // возвращает User или null
    return $id > 0 ? new User() : null;
}
$user = findUser(0);
var_dump($user); // NULL

4. Массивы: ключи и значения разных типов

Пример
$mixed = [
    0 => 'zero',
    'key' => 123,
    3.14 => 'pi', // ключ float приводится к int (3)
    true => 'bool' // true приводится к 1
];
print_r($mixed);
Array
(
    [0] => zero
    [key] => 123
    [1] => bool
    [3] => pi
)

5. Объект stdClass из массива

Пример
$array = ['name' => 'Анна', 'age' => 25];
$object = (object)$array;
echo $object->name; // Анна

6. Использование var_dump для отладки типов

Пример
$data = [1, 'two', null, [3]];
var_dump($data);
array(4) {
  [0]=> int(1)
  [1]=> string(3) "two"
  [2]=> NULL
  [3]=> array(1) {
    [0]=> int(3)
  }
}

7. Тип mixed в PHP 8

Пример
function debug(mixed $value): void {
    var_dump($value);
}
debug(42);
debug('строка');

8. Автоматическое приведение в математических операциях

Пример
$a = '10';
$b = 5;
echo $a + $b; // 15 (строка преобразована в int)
echo $a . $b; // '105' (конкатенация, int преобразован в строку)

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

En
Php types (php)