php - setter php 中的类型提示与类型转换

标签 php casting setter 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;
    }
}

两者中哪一个被认为是最佳实践?两者都做有意义吗?:

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

最佳答案

它们在功能上并不等同。

类型提示:您指定必须传递的类型。如果给定值的类型不正确,则会生成错误。这不会将传递的值强制转换或“转换”为特定类型。

类型转换:无论传递什么值,您都在将其“转换”为正确的类型。如果您的函数“需要”一个数组,那么为什么要传递一个 bool 值然后将其转换为一个数组?

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

public function setBar(Bar $bar)

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

关于php - setter php 中的类型提示与类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41046640/

相关文章:

c - 处理结构体c

c++ - c 在 C++ 中转换,编译时还是运行时?

c - 如何在模运算之前键入 uint32 数组的强制转换元素?

javascript - ( typescript )不在类实例的子属性上调用 Setter

java - 如何在 IntelliJ IDEA 中生成私有(private) setter

php - i18n Smarty 变量转换为 lang()

php - Symfony 表格 : How to replace form class/retrieve all extra data?

iphone - Objective-C Setter 内存管理

php - 在 PHP 中合并两个 sql 查询的结果

PHP:如何将动态变量名与类的 setter 一起使用