Php 是否存在类stdClass的根接口或特征等价物?
在PHP中,基线类是Php 是否存在类stdClass的根接口或特征等价物?,php,interface,traits,Php,Interface,Traits,在PHP中,基线类是stdClass,所有其他类都是该类的子类,在大多数情况下,如果没有定义其他类,它也是返回的默认对象 我的第一个问题是,是否有一个等效的系统定义的等效接口,如stdInterface或类似的接口 第二,是否存在系统定义的共性特征?我希望这不太可能,但如果没有一些确认,我不会排除这种可能性 我不知道这两种说法,也找不到任何关于这两种说法的特别参考,甚至以前也没有人问过这个问题。在某些情况下,如果其中一个或两个都可用,它可能会很有用。提前谢谢 编辑:正如和所指出的,stdClas
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已经将一个资产添加为其他包的依赖项,而不必再添加另一个包并进一步膨胀磁盘空间。在某些情况下,这将是相当沉重的,我宁愿在可能的情况下保存一些内存。