PHP 类型提示:数组支持,对象不是?

2022-08-30 17:49:35

我是否遗漏了某些内容,或者 PHP 5.x 中确实不支持通用对象类型提示?

我发现非常奇怪的是,支持提示数组,而提示对象不支持,至少不是开箱即用。

我想有这样的东西:

function foo(object $o)

正如我们一样:

function foo(array $o)

可能的用法示例:对象集合类的方法。

解决办法:使用由所有类实现的接口“Object”,或从泛型类“Object”扩展所有类,然后编写如下内容:

function foo(Object $o)

嗯,那只是不可爱。

用作类型提示不起作用:stdClass

可捕获的致命错误:传递给 c::add() 的参数 1 必须是 stdClass 的实例,给定 b 的实例


答案 1

由于类型提示应使客户端代码适应您的 API,因此具有接受接口的解决方案似乎恰到好处。

以这种方式看待它:给出一个要使用的数组,因此您可以确切地知道哪些本机函数适用并且可以由 使用。yourMethod(array $input)yourMethod()yourMethod()

如果您指定了以下方法:您还会知道可以应用于哪些方法,因为您知道/可以查找接口附带的哪组规则。yourSecondMethod(yourInterface $input)$inputyourInterface

在你的例子中,接受任何对象似乎都是错误的,因为你没有任何办法知道在输入上使用哪些方法。例:

function foo(Object $o) {
    return $o->thisMethodMayOrMayNotExist();
}

(不暗示语法有效)


答案 2

不,这是不可能做到的。我没有错过任何东西。


推荐