11
$obj = new stdClass();
echo gettype($obj); //object

function abc(object $obj) {
    return;
}

abc($obj); //Catchable fatal error: Argument 1 passed to abc() must be an instance of object, instance of stdClass given

Why calling abc($obj) triggers error?

Catchable fatal error: Argument 1 passed to abc() must be an instance of object, instance of stdClass given

4

2 回答 2

25

因为类型提示仅适用于类名、接口名或array. 在 php 对象模型中没有共同的祖先object(就像在 C# 等其他一些编程语言中一样)。你必须指定的是stdClass

php 7.2开始,现在可以object完全按照您在问题中的猜测使用类型提示:

function abc(object $obj) {
    return;
}
于 2012-11-08T10:54:38.893 回答
4

阅读有关 PHP 中类型提示的文档。您当前的代码强制abc函数接受作为类实例的参数object(名为object! 的类)。改为这样做:

function abc(stdClass $obj)
于 2012-11-08T10:57:25.813 回答