输入提示v鸭打字

时间:2015-03-18 12:56:22

标签: oop design-patterns interface duck-typing

使用以下简单示例(在php中编码):

public function doSomething(Registry $registry)
{
    $object = $registry->getData('object_key');
    if ($object) {
        //use the object to do something
    }
}

public function doSomething($registry)
{
    $object = $registry->getData('object_key');
    if ($object) {
        //use the object to do something
    }
}

这两种方法有什么好处?

两者最终都会在不同的点上失败:

如果传递了非Registry类型的对象,则第一个示例将失败,如果传递的对象未实现getData方法,则第二个示例将失败。

您如何选择何时使用这两种方法?

1 个答案:

答案 0 :(得分:0)

这是两种不同的设计方法。责任在于开发人员以确保任何一种方法都不会失败。

类型提示是一种更强大的方法,而鸭子打字可以提供更大的灵活性。