PHP 中的 duck typing
来源:6-2 duck typing的概念

苏近之2020
2019-08-21
老师,您好,我本身是做 PHP 的。所以,使用 PHP 来描述我自己在学您的课程之后得到的一点理解。你看,这样的理解,是不是正确。
public function getConfigs($configObject)
{
return $configObeject->getConfigs();
}
这是一个获取配置的方法,其不管传入的对象是什么,只要其实现了getConfigs
方法即可。这非常灵活,而且是在运行时确定的。只有运行到这行代码,才能够确定这对象是否存在这个方法,如果不存在就报错了。这和您课程中举例的 Python 的例子是一样的。
同样是 PHP, 上面的代码如果改成下面这样子,就不是 duck typing:
public function getConfigs(ConfigInterface $configObject)
{
return $configObeject->getConfigs();
}
之所以不是鸭子类型,和您在举的 Java 例子是一样的,因为它必须实现ConfigInterface
接口才可以,所以不是 duck typing。
我并不太了解 Java,不知道拿您使用 Java 的例子,套用在 PHP 上是否仍旧适用。如果您看到,还希望帮我确认一下。感谢!
写回答
3回答
-
同学的理解是正确的!
不过呢,在其他语言中不建议使用上面的duck typing的写法。我们宁可放弃灵活性,采用接口的写法。毕竟,强制类型检查获得的好处要比灵活性大得多。
在Go语言中由于由使用者定义接口,实现者不需要显示实现接口,才给我们带来即灵活又强制类型检查的duck typing。
112019-08-22 -
qq_安东尼_4
2021-12-11
php有接口类功能:
//接口类 interface a { //定义接口方法 public function getInfoById(int $id): array; }
引用类必须创建接口类中的所有方法,否则在执行时会报错
class b implements a { //实现接口方法 public function getInfoById($id):array { //业务逻辑..... return []; } }
00 -
蹭你七时年
2021-04-23
道理是这样。。但是,我无法理解这样的写法应用场景在哪里?
00
相似问题