Есть ли корневой интерфейс или признак, эквивалентный классу stdClass?

В PHP базовый класс stdClassи все остальные классы являются дочерними для этого класса, и он также является объектом по умолчанию, возвращаемым в большинстве случаев, когда другой класс не определен.

Мой вопрос первый, если есть эквивалентный интерфейс системы, определенный, как stdInterface или что-то подобное?

Во-вторых, существует ли в системе определенная общая черта? Я ожидал бы, что это будет менее вероятно, но я не исключил бы это без некоторого подтверждения.

Я не знаю ни о такой конструкции, и не смог найти какой-либо конкретной ссылки на этот вопрос или даже на этот вопрос, который задавался ранее. Это может быть полезно в некоторых случаях, если один или оба были доступны. Заранее спасибо.

Изменить: как указано deceze и упоминается также в другом месте, stdClass не корневой класс, а просто универсальный объект.

2 ответа

В результате, $object instancof \stdClass всегда буду оценивать true,

Это совершенно и явно неправильно.

В PHP нет жесткой иерархии сверху вниз, нет класса верхнего уровня, а также нет интерфейса или черты верхнего уровня.

Ты можешь использовать is_subclass_of чтобы определить, относится ли класс или интерфейс к другому классу или интерфейсу, не требуя его экземпляра:

interface  Foo {}

class Bar implements Foo {}

interface Baz extends Foo {}

var_dump(is_subclass_of('Bar', 'Foo'));  // true
var_dump(is_subclass_of('Baz', 'Foo'));  // true

В PHP нет stdInterface или stdTrait, но вы можете использовать interface_exists и trait_exists, чтобы проверить, является ли переменная интерфейсом или признаком, например:

<?php
trait X {}
interface Y {}

var_export(interface_exists('Y'));
echo '<br>';
var_export(trait_exists('X'));
//Output:
//true
//true
Другие вопросы по тегам