如何在PHP中对特定对象数组进行类型提示?

5

I want to

return array(new Foo(), new Bar());

有没有一种方法可以对此进行类型提示?

1
“Hinting”是什么意思? - Renjith V R
2
目前还没有方法,尽管有关于这个主题的RFC被拒绝了。 - Mark Baker
你有RFC的URL吗,@MarkBaker? - Daan
3个回答

3

简短的回答是不行

稍微详细一点的答案是,您可以创建自己的值对象用作提示,但这意味着您需要返回一个对象而不是数组。

class Foo {};
class Bar {};

class Baz {
    private $foo;
    private $bar;

    public function __construct(Bar $bar, Foo $foo) {
        $this->bar = $bar;
        $this->foo = $foo;
    }

    public function getFoo() : Foo {
        return $this->foo;
    }

    public function getBar() : Bar {
        return $this->bar;
    }

}

function myFn() : Baz {
    return new Baz(new Bar(), new Foo());
}

$myObj = myFn();
var_dump($myObj);

注意:这需要PHP 7+来提示返回类型。

1
不,PHP中不能这样做。PHP5类型提示仅适用于函数和方法参数,而不是返回类型。
然而,PHP7添加了返回类型声明,但与参数类型声明类似,它们只能是以下之一:
- 一个类或接口; - self; - 数组(没有关于其内容的具体说明); - callable; - bool; - float; - int; - string
如果您正在使用PHP7,则可以仅指定一个数组或创建一个包含这两个对象的类,并将其用作返回类型。

http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration

http://php.net/manual/en/functions.returning-values.php#functions.returning-values.type-declaration


0

这在phpstorm中有效(当然不需要指定元素的顺序):

/**
 * @return Foo[]|Bar[]
 */

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接