Основные типы значений в PHP: классификация и практическое применение

Раздел: Программирование на PHP -> Работа с типами и настройками

Работа с типами данных в PHP: от определения до преобразования

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

Основной подход - использовать набор встроенных функций is_* для проверки типа и операторы явного приведения (int), (float), (string) для преобразования. Этот способ даёт максимальный контроль над типами и читаемость кода.


$number = "42";
if (is_numeric($number)) {
    $intValue = (int) $number;
    echo $intValue; // 42
}
Типичная ошибка: использование is_int() для строки, содержащей число - вернёт false. Следует применять is_numeric() перед приведением. Также при приведении дробных чисел к (int) происходит отбрасывание дробной части без округления.

Цель: валидация пользовательского ввода, безопасная работа с API, строгая типизация в функциях.

Какие альтернативные подходы существуют для работы с типами?

Вместо is_* можно использовать функцию gettype(), которая возвращает строковое название типа. Для преобразования - settype(), изменяющая тип переменной «на месте».


$var = 3.14;
echo gettype($var); // double
settype($var, 'integer');
echo $var; // 3
Функция settype() меняет исходную переменную, что может быть неочевидно. gettype() не различает float и double - всегда возвращает double. Для объектов применяется instanceof.

Когда использовать: gettype() удобна для отладки, settype() - при необходимости однократного изменения типа без создания новой переменной.

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

Полный набор проверок и преобразований типов с демонстрацией результатов.

Проверка типа с помощью is_* функций

Пример

$values = [42, 3.14, "hello", true, [1,2], null, fopen('php://memory','r')];
foreach ($values as $v) {
    echo is_int($v) ? 'int ' : '';
    echo is_float($v) ? 'float ' : '';
    echo is_string($v) ? 'string ' : '';
    echo is_bool($v) ? 'bool ' : '';
    echo is_array($v) ? 'array ' : '';
    echo is_null($v) ? 'null ' : '';
    echo is_resource($v) ? 'resource' : '';
    echo PHP_EOL;
}
int 
float 
string 
bool 
array 
null 
resource

Явное приведение типов

Пример

$a = "123.45abc";
echo (int)$a;      // 123
echo (float)$a;    // 123.45
echo (string)123;  // "123"
echo (bool)"false"; // true (непустая строка)
123
123.45
123
1

Сравнение с учётом типа (=== vs ==)

Пример

var_dump(0 == "0");   // bool(true)
var_dump(0 === "0");  // bool(false)
var_dump(null == false); // bool(true)   
var_dump(null === false); // bool(false)
bool(true)
bool(false)
bool(true)
bool(false)

Объявление строгих типов (declare)

Пример

declare(strict_types=1);
function add(int $a, int $b): int {
    return $a + $b;
}
echo add(5, 10); // 15
// echo add("5", 10); // TypeError
15

Преобразование в объект и обратно

Пример

$arr = ['name' => 'John', 'age' => 30];
$obj = (object)$arr;
echo $obj->name; // John

$obj2 = new stdClass();
$obj2->value = 42;
$arr2 = (array)$obj2;
print_r($arr2);
John
Array
(
    [value] => 42
)

Использование оператора instanceof

Пример

class Car {}
$myCar = new Car();
var_dump($myCar instanceof Car);   // bool(true)
var_dump($myCar instanceof stdClass); // bool(false)
bool(true)
bool(false)

Типы записей PHP - comments

En
Posts php type (php)