Php 是否存在类stdClass的根接口或特征等价物?

Php 是否存在类stdClass的根接口或特征等价物?,php,interface,traits,Php,Interface,Traits,在PHP中,基线类是stdClass,所有其他类都是该类的子类,在大多数情况下,如果没有定义其他类,它也是返回的默认对象 我的第一个问题是,是否有一个等效的系统定义的等效接口,如stdInterface或类似的接口 第二,是否存在系统定义的共性特征?我希望这不太可能,但如果没有一些确认,我不会排除这种可能性 我不知道这两种说法,也找不到任何关于这两种说法的特别参考,甚至以前也没有人问过这个问题。在某些情况下,如果其中一个或两个都可用,它可能会很有用。提前谢谢 编辑:正如和所指出的,stdClas

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

我的第一个问题是,是否有一个等效的系统定义的等效接口,如
stdInterface
或类似的接口

第二,是否存在系统定义的共性特征?我希望这不太可能,但如果没有一些确认,我不会排除这种可能性

我不知道这两种说法,也找不到任何关于这两种说法的特别参考,甚至以前也没有人问过这个问题。在某些情况下,如果其中一个或两个都可用,它可能会很有用。提前谢谢


编辑:正如和所指出的,
stdClass
不是根类,只是一个泛型对象。

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

<?php
trait X {}
interface Y {}

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

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

<?php
trait X {}
interface Y {}

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

因此,
$object instanco\stdClass
的计算结果将始终为
true

这是完全错误的

PHP没有任何严格的自上而下的层次结构,没有顶级类,也没有顶级接口或特性

您可以使用来确定一个类或接口是否与另一个类或接口相关,而不需要它的实例:

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
因此,
$object instanco\stdClass
的计算结果将始终为
true

这是完全错误的

PHP没有任何严格的自上而下的层次结构,没有顶级类,也没有顶级接口或特性

您可以使用来确定一个类或接口是否与另一个类或接口相关,而不需要它的实例:

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

在大多数情况下,如果相关构造尚未在当前运行时编译,则这些函数和类似函数将失败。使用
instanceof
通常会强制
spl\u autoload
在尚未启动的情况下启动,因此是首选项。但这些都是可行的选项,因此我仍将更新您的答案。在大多数情况下,如果相关构造尚未在当前运行时编译,这些函数和类似函数将失败。使用
instanceof
通常会强制
spl\u autoload
启动,如果它还没有启动,这就是首选项。尽管这些都是可行的选项,所以我还是会支持你的答案。因为接口和特征本身无法实例化,您什么时候需要测试某个接口是否是某个其他(根)接口的
实例?以避免反射的影响,并检查是否存在公共接口的本地化扩展,例如有人创建了一个继承Psr标准并添加其他包特定功能的接口或其他什么。在某些情况下,我想知道包的责任范围是什么,如果可以避免的话,不需要实例化对象或触发反射程序。例如,找出一个问题是否可以在一个非常大的项目中处理,并且Composer已经将一个资产添加为其他包的依赖项,而不必再添加另一个包并进一步膨胀磁盘空间。在某些情况下,这将是一个相当沉重的任务,如果可能的话,我宁愿节省一些内存。由于接口和特征本身无法实例化,你什么时候需要测试一个接口是否是另一个(根)接口的
实例?以避免反射的重量,并检查是否存在公共接口的本地化扩展,例如有人创建了一个继承Psr标准并添加了其他特定于包的功能或其他内容的接口。在某些情况下,我想知道包的责任范围是什么,如果可以避免的话,不需要实例化对象或触发反射程序。例如,找出一个问题是否可以在一个非常大的项目中处理,并且Composer已经将一个资产添加为其他包的依赖项,而不必再添加另一个包并进一步膨胀磁盘空间。在某些情况下,这将是相当沉重的,我宁愿在可能的情况下保存一些内存。