PHP 5.0中多态性的实现方案浅析
作者: 朱先忠编译, 出处:天极, 责任编辑: 叶江,
2007-03-02 10:35
本文将讨论多态性的概念及其在面向对象设计中的应用,还将分析如何在PHP 5中使用多态性以及存在的优缺点……
三、应用多态性设计
我们将继续使用Person基类的例子,现在让我们分析一个非多态性的实现。下列示例中使用了不同类型的Person对象--这是一种非常不理想的编程方式。注意,实际的Person类被省略。目前为止,我们仅关心代码调用的问题。
| <?php $name = $_SESSION['name']; $myPerson = Person::GetPerson($name); switch (get_class($myPerson)){ case 'David' : $myPerson->AddFeedback('Great Article!','Some Reader', date('Y-m-d')); break; case 'Charles': $myPerson->feedback[] = array('Some Reader', 'Great Editing!'); break; case 'Alejandro' : $myPerson->Feedback->Append('Awesome Javascript!'); break; default : $myPerson->AddFeedback('Yay!'); } ?> |
这个示例展示了行为不同的对象,还有一个switch语句用于区分不同的Person类对象,从而执行其各自相应的正确操作。注意,这里针对不同条件的回馈注释是不同的。在实际应用程序开发中可能不会出现这种情形;我仅为了简单地说明类实现中存在的区别。
下面的一个示例使用了多态性。
| <?php $name = $_SESSION['name']; $myPerson = Person::GetPerson($name); $myPerson->AddFeedback('Great Article!', 'SomeReader', date('Y-m-d')); ?> |
注意,这里没有switch语句,而最重要的是,缺乏有关Person::GetPerson()会返回什么类型的对象。而另一个Person::AddFeedback()是一个多态方法。行为完全是由具体类进行封装的。请记住,在此无论我们使用的是David,Charles还是Alejandro,调用代码从不必了解具体类的功能,而仅知道基类就可以了。
- 本文关键词:

