2017-02-14 20 views
0

只是我或者这种行为在PHP中很奇怪。 比方说,例如,我们有这样的功能:PHP - 对象的类型提示,与stdClass不一样

function test(object $arg) 
{} 

如果我要调用此函数:

​​

对象(类型提示)将不会指stdClass的,并将导致即使在PHP中查看内置的settype()函数时,对象似乎是对stdClass的引用。即使铸造到一个对象将导致一个stdClass,但由于某种原因,我不能使用settype($ foo,'stdClass')...

这是背后的原因吗?

+0

和类型的对象不是一个字符串,(串) '喇嘛',(对象){任:1} –

+0

尝试'功能测试(stdClass的$ ARG){}' –

回答

1

PHP中没有总体对象类定义。即使您要创建一个名为myClass的类并为测试函数提供实例,该代码也不起作用。类型转换为对象creates an instance of type stdClass

您必须使用function test(stdClass $arg)作为函数定义。

+0

我知道它是如何工作的,我想知道为什么关键字对象甚至存在...当使用它作为一种类型暗示它不引用stdClass,但是当转换为一个对象时,它会导致一个stdClass ...为什么不只是删除关键字和转换为stdClass,并且如果他们想要保留它,为什么在没有任何事情会匹配时允许它用作暗示类型? – Saruman

+0

因为如果你愿意,你可以创建一个名为object的类。 PHP不会提前知道哪些类将被定义。 成为一个stdClass的对象就是它的工作原理,例如你投到一个“对象”而不是一个字符串。 – mcq8

+0

更糟糕的是,这意味着“对象”意味着不同的事情取决于是否已经有一个名为object的类。但谢谢你的答案 – Saruman