Все типы данных PHP и их применение в файле index

Раздел: PHP -> Типы данных PHP

Основы типов данных PHP в контексте index.php

Как наиболее эффективно работать с типами данных в файле index.php, чтобы избежать ошибок и повысить надёжность кода?

Современный PHP предлагает строгую типизацию с помощью объявления declare(strict_types=1). Включение этой директивы в самом начале index.php заставляет интерпретатор проверять соответствие типов при передаче аргументов в функции и возвращаемых значений. Это снижает количество неявных приведений и делает код предсказуемым.

<?php
declare(strict_types=1);

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

echo add(5, 10); // 15
// echo add('5', 10); // Fatal error: Uncaught TypeError

Проблема: без строгой типизации PHP автоматически преобразует строку '5' в число. Это может привести к логическим ошибкам, которые трудно отловить. Решение: всегда использовать strict_types для критичных файлов (например, index.php) и следовать принципу явного указания типов.

Ошибка: если забыть про strict_types и передать строку в параметр int, PHP выдаст только warning в старых версиях. В PHP 8+ это TypeError с фатальной остановкой, но только если включена строгая типизация.

Как проверить тип переменной без объявления типов?

Если проект использует смешанные типы (mixed) или legacy-код, применяется функция gettype() или семейство is_* (is_int, is_string, is_array и т.д.). Это позволяет в рантайме определить, с каким значением вы работаете.

<?php
$value = $_GET['id'] ?? null;

if (is_numeric($value)) {
    $id = (int) $value;
} else {
    error_log('Неверный формат ID: ' . gettype($value));
}

Проблема: is_numeric() возвращает true для чисел с плавающей точкой и научной нотации. Это может быть нежелательно для целочисленного ID. Решение: использовать ctype_digit() для проверки строки из цифр.

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

Приведение типов (type casting) в PHP выполняется с помощью конструкций (int), (string), (array), (object) и т.д. Также существуют функции intval(), floatval(), strval().

<?php
$number = '42.7';
$int = (int) $number;          // 42 (отбрасывает дробную часть)
$float = (float) $number;      // 42.7
$string = (string) 100;        // '100'

Проблема: приведение строки 'apple' к int даст 0, что может остаться незамеченным. Решение: перед преобразованием проверять содержание строки с помощью is_numeric() или регулярных выражений.

Как объявить переменную с определенным типом в PHP 7.4+?

Начиная с PHP 7.4, можно задать тип для свойств класса. В файле index.php это актуально, если вы определяете классы-обработчики или DTO. Типизированные свойства автоматически проверяются при присвоении.

<?php
class User {
    public int $id;
    public string $name;
    public ?DateTime $birthday = null;
}

$user = new User();
$user->id = 1;
$user->name = 'Анна';
// $user->id = 'строка'; // TypeError

Проблема: попытка присвоить null свойству без знака вопроса (?) вызовет ошибку. Решение: использовать nullable-типы (например, ?string) для необязательных полей.

Дополнительные примеры работы с типами данных в PHP

Пример
<?php
declare(strict_types=1);

// Пример 1: Использование union-типов (PHP 8+)
function formatValue(int|string $value): string {
    if (is_int($value)) {
        return 'Число: ' . $value;
    }
    return 'Строка: ' . $value;
}

echo formatValue(42);
echo formatValue('Привет');
// formatValue(3.14); // TypeError (float не входит в int|string)
Число: 42Строка: Привет
Пример
<?php
// Пример 2: Преобразование массива в объект и наоборот
$array = ['name' => 'Иван', 'age' => 30];
$object = (object) $array;
echo $object->name . ', ' . $object->age; // Иван, 30

$newArray = (array) $object;
var_dump($newArray['age']); // int(30)
Иван, 30int(30)
Пример
<?php
// Пример 3: Проверка типа с помощью match (PHP 8+)
$value = '123';
$type = match (true) {
    is_int($value) => 'integer',
    is_float($value) => 'float',
    is_string($value) && is_numeric($value) => 'numeric string',
    is_string($value) => 'string',
    default => 'other'
};
echo $type; // numeric string
numeric string
Пример
<?php
// Пример 4: Использование declare(strict_types=0) по умолчанию
$price = '19.99';
function calculateTax(float $amount): float {
    return $amount * 0.2;
}
// без strict_types строка '19.99' будет преобразована во float
echo calculateTax($price); // 3.998
3.998
Пример
<?php
// Пример 5: Тип resource – работа с файлами
$handle = fopen('data.txt', 'r');
if (is_resource($handle)) {
    echo 'Ресурс открыт';
    fclose($handle);
} else {
    echo 'Не удалось открыть файл';
}
Ресурс открыт
Пример
<?php
// Пример 6: Использование mixed и проверка через gettype
function debug(mixed $input): void {
    echo 'Тип: ' . gettype($input) . PHP_EOL;
}
debug(1);
debug('text');
debug([1,2]);
debug(null);
Тип: integer
Тип: string
Тип: array
Тип: NULL

Типы данных в index.php - comments

En
Index php type (php)