在setter php中输入Hinting vs Type Casting

mcm*_*phy 4 php setter casting type-hinting

在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;
    }
}
Run Code Online (Sandbox Code Playgroud)

哪两个被认为是最佳做法?两者都有意义吗?:

class Foo  {
    public $bar;
    ...
    public function setBar(array $bar)  {
        $this->bar = (array)$bar;
    }
}
Run Code Online (Sandbox Code Playgroud)

Abr*_*ver 9

它们在功能上并不相同.

类型提示:您正在规定必须传递的类型.如果给定值的类型不正确,则会生成错误.这不会将传递的值转换或"转换"为特定类型.

类型转换:无论传递什么值,您都将其"转换"为正确的类型.如果你的函数"需要"一个数组,那么为什么要传递一个布尔值然后将它转换为数组呢?

此外,类型提示允许您指定特定类的对象实例.在下面,$bar必须是类的实例,Bar否则生成错误:

public function setBar(Bar $bar)
Run Code Online (Sandbox Code Playgroud)

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