Есть ли корневой интерфейс или признак, эквивалентный классу 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