当前位置: 网学 > 编程文档 > PHP > 正文

PHP 5.0中多态性的实现方案浅析

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/17
下载{$ArticleTitle}原创论文样式
erson($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 =  PHP 5.0中多态性的实现方案浅析_网学
浏览:
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号
SESSION['name']; 
 $myPerson = Person::GetPerson($name); 
 $myPerson->AddFeedback('Great Article!', 'SomeReader', date('Y-m-d')); 
?> 


  注意,这里没有switch语句,而最重要的是,缺乏有关Person::GetPerson()会返回什么类型的对象。而另一个Person::AddFeedback()是一个多态方法。行为完全是由具体类进行封装的。请记住,在此无论我们使用的是David,Charles还是Alejandro,调用代码从不必了解具体类的功能,而仅知道基类就可以了。

  尽管我的示例并不完美,但是,从调用代码的角度,它已经展示了多态性的基本用法。现在我们需要分析这些类的内部实现。从一个基类进行派生的一个最伟大的地方在于,该派生类能够存取父类的行为,这种情况常常是缺省的实现,但是也可能出现在类继承链中用于创建更为复杂的行为。下面是这种情况的一个简单展示。

以下是引用片段:
<?php 
class Person{ 
 function AddFeedback($comment, $sender, $date){ 
  //把回馈添加到数据库 
 } 

class David extends Person{ 
 function AddFeedback($comment, $sender){ 
  parent::AddFeedback($comment, $sender, 
  date('Y-m-d')); 
 } 

?> 


  在此,David类中的AddFeedback方法实现中首先调用了Person::AddFeedback方法。你可能注意到,它模仿了C++,Java或C#中的方法重载。请记住,这仅是一个简单化的示例,并且你编写的实际代码完全依赖于你的实际工程。

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号