在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;
}
}
答案 0 :(得分:8)
它们在功能上并不相同。
类型提示:您正在规定必须传递的类型。如果给定值的类型不正确,则会生成错误。这不会转换或转换"将传递的值转换为特定类型。
类型转换:无论传递什么值,您都可以转换"它进入正确的类型。如果你的功能需要"一个数组,那么为什么要传递布尔值然后将它转换为数组?
此外,类型提示允许您指定特定类的对象实例。在下文中,$bar
必须是类Bar
的实例,否则会生成错误:
public function setBar(Bar $bar)
您不能将变量类型转换为特定类的对象。
答案 1 :(得分:2)
默认情况下,如果可能,PHP会将错误类型的值强制转换为预期的标量类型。例如,为需要字符串的参数赋予整数的函数将获得string类型的变量。
如果禁用strict_type,PHP将尝试转换值,例如:
function myFunction(int $bar) {
echo 'Received value: ' . $bar . ' ' . gettype($bar);
}
$foo = '12';
echo 'Passed value: ' . $foo . ' ' . gettype($foo);
myFunction($foo);
将打印:
Passed value: 12 string
Received value: 12 integer
在你的情况下,你不需要同时使用它们,它首选第二个选项,因为如果可能,PHP会尝试强制转换,否则会触发错误。
class Foo {
public $bar;
...
public function setBar(array $bar) {
$this->bar = $bar;
}
}