在php中,我想知道以下内容在功能上是否等价?

class Foo  {
    public $bar;
    ...
    public function setBar($bar)  {
        $this->bar = (array)$bar;
    }
}


class Foo  {
    public $bar;
    ...
    public function setBar(array $bar)  {
        $this->bar = $bar;
    }
}

哪一个被认为是最佳实践?两者兼得有意义吗?:
class Foo  {
    public $bar;
    ...
    public function setBar(array $bar)  {
        $this->bar = (array)$bar;
    }
}

最佳答案

它们在功能上并不等同。
类型提示:您正在指示必须传递的类型。如果给定值的类型不正确,则会生成错误。这不会将传递的值强制转换或“转换”为特定类型。
类型转换:不管传递的是什么值,都是将其“转换”为正确的类型。如果您的函数“需要”一个数组,那么为什么要传递一个布尔值,然后将其转换为一个数组?
此外,类型提示允许您指定特定类的对象实例。在以下情况下,$bar必须是类Bar的实例,否则将生成错误:

public function setBar(Bar $bar)

不能将变量类型转换为特定类的对象。

10-01 18:48
查看更多