是否存在类stdClass的根接口或特征?

时间:2017-12-11 10:47:28

标签: php interface traits

在PHP中,基线类是stdClass,并且所有其他类都是该类的子类,并且它也是在大多数情况下返回的默认对象,其中没有定义其他类。

我的问题是,首先是否存在等效的系统定义的等效接口,如stdInterface或类似的东西?

其次,是否存在系统定义的通用特征?我希望这不太可能,但如果没有一些确认,我不会排除它。

我不知道这样的构造,也找不到任何特定的参考,或者甚至之前被问过这个问题。在某些情况下,如果有一个或两个可用,它可能会有用。提前谢谢。

修改:正如decezementioned elsewhere also所指出的那样,stdClass不是根类,而只是一个通用对象。

2 个答案:

答案 0 :(得分:1)

PHP中没有stdInterface或stdTrait,但您可以使用interface_existstrait_exists来测试变量是接口还是特征,例如:

<?php
trait X {}
interface Y {}

var_export(interface_exists('Y'));
echo '<br>';
var_export(trait_exists('X'));
//Output:
//true
//true

答案 1 :(得分:1)

  

因此,$object instancof \stdClass将始终评估为true

这完全是demonstrably错误的。

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