W3docs

is_object()

Функция PHP is_object() проверяет, является ли переменная объектом. Синтаксис, возвращаемое значение, отличия от instanceof и типичные ошибки.

Введение

is_object() — встроенная функция PHP, которая проверяет, содержит ли переменная объект — экземпляр какого-либо класса. Она возвращает boolean, поэтому чаще всего используется в инструкции if для защитной проверки перед вызовом метода или обращением к свойству значения с неизвестным типом.

Объект — это значение, созданное из класса с помощью new (или возвращённое фабрикой, драйвером базы данных, json_decode() и т. д.). Вызов метода на значении, которое не является объектом, вызывает фатальную ошибку Error, поэтому предварительная проверка — распространённый защитный паттерн при обработке входных данных неизвестной формы.

Синтаксис

is_object(mixed $value): bool
  • $value — переменная для проверки. Принимается любой тип.
  • Возвращает true, если $value является объектом, и false для любого другого типа (string, int, array, null и т. д.).

Базовый пример

php— editable, runs on the server

Здесь $obj — экземпляр MyClass, поэтому is_object() возвращает true; $text — строка, поэтому возвращается false.

Почему var_dump, а не echo? Когда вы выводите boolean через echo, true печатается как 1, а false — как пустая строка, поэтому echo is_object($text) выглядит так, словно ничего не вывелось. var_dump() явно показывает тип (bool(true) / bool(false)), что делает проверки типов гораздо нагляднее при изучении.

Защита вызова метода

Наиболее распространённое практическое применение — защита кода, который предполагает наличие объекта:

<?php
function describe($value): string {
  if (is_object($value)) {
    return "Got an object of class " . get_class($value);
  }
  return "Not an object: " . gettype($value);
}

echo describe(new MyClass()), "\n"; // Got an object of class MyClass
echo describe("hello"), "\n";       // Not an object: string
echo describe([1, 2, 3]), "\n";     // Not an object: array
?>

Сочетание is_object() с get_class() позволяет ветвиться по конкретному типу только тогда, когда это безопасно.

Что считается объектом

Некоторые значения, которые кажутся простыми данными, на самом деле являются объектами в PHP:

<?php
var_dump(is_object((object) ["a" => 1]));   // bool(true)  — array cast to stdClass
var_dump(is_object(json_decode('{"a":1}'))); // bool(true)  — default decode returns an object
var_dump(is_object(fn() => 1));              // bool(true)  — closures are Closure objects
var_dump(is_object(null));                   // bool(false)
var_dump(is_object([1, 2, 3]));              // bool(false) — arrays are NOT objects
?>

Последние два — типичные ловушки: null и массивы не являются объектами. Если нужно различать их, используйте is_null() и is_array().

Связанные функции

ФункцияПроверяет
is_object()экземпляр объекта
is_array()массив
is_string()строку
is_int()целое число
is_null()значение null
gettype()возвращает имя типа в виде строки

Если вам нужна проверка instanceof для конкретного класса, а не «любого объекта», используйте оператор instanceofis_object() лишь сообщает, что значение является каким-то объектом.

Заключение

is_object() отвечает на один конкретный вопрос: является ли это значение объектом? Используйте её для защиты доступа к методам и свойствам от фатальных ошибок, которые возникают при вызове методов на строках, массивах или null. Помните о сюрпризах — приведения через (object), результаты json_decode() и замыкания являются объектами, тогда как массивы и null — нет. Для проверки конкретного типа используйте instanceof; для получения читаемого имени типа — gettype().

Практика

Практика
Какова функция is_object() в PHP?
Какова функция is_object() в PHP?
Was this page helpful?