IT技术江湖   操作系统   安全技术   平面设计   Web开发   数据库   互联网   搜索引擎   网络广告   
引擎技术江湖  BLOG  合作联系
本站
Google
IT技术江湖
首页>Web开发>php> PHP 5.0中多态性的实现方案浅析
  • IT技术江湖
  • PHP 5.0中多态性的实现方案浅析
    http://www.hack1st.com 来源: 2008-03-28 阅读: 评论

     提要:本文将讨论多态性的概念及其在面向对象设计中的应用,还将分析如何在PHP5中使用多态性以及存在的优缺点。
      PHP的最新发行版本中已经实现了对迟绑定的支持。当然,在使用其迟绑定功能时还存在很多问题。如果你使用的是更旧版本的PHP(我的服务器上运行的是PHP 5.0.1版本),那么你可能发现其中缺乏对于迟绑定的支持。因此,请注意本文中的代码有可能无法工作在你特定的PHP 5版本中。

      一、 PHP 5和多态性

      本文想讨论面向对象编程中最为重要的部分之一--多态性的设计。为了说明问题,我使用了PHP 5。在你继续阅读之前,请首先明确本文并不是完全有关于PHP的。尽管这种语言在以前的两个主要版本中在快速开发方面已经取得很大的进步,但是,在其与更为成熟的语言如C++或者Java相匹敌之前,它对于对象的支持还要经历一段历程。

      如果你是一位面向对象编程的入门者,那么本文可能不适合你,因为多态性这部分知识比较特别:一旦理解了它,你将永远不会忘记。如果你想简单了解一点对象编程和设计知识,并且当某人说"某个对象是多态的"时,还不十分清楚这是什么意思的话,那么本文正适合你。

      到本文最后,你应该知道什么是多态性以及如何把它应用到面向对象的设计中,并且你会了解PHP 5中对象编程的优点与不足。

      二、什么是多态性?

      多态性,其来自于dictionary.com的定义是"以不同形式,阶段或者类型出现在独立的组织中或者同种组织中,而不存在根本区别。"由该定义,我们可以认为,多态性是一种通过多种状态或阶段来描述相同对象的编程方式。其实,它的真正意义在于:实际开发中,我们只需要关注一个接口或基类的编程,而不必担心一个对象所属于的具体类(class)。

      如果你熟悉设计模式,即使只是有个初步了解,那么你也会了解这个概念。事实上,多态性可能是基于模式设计编程中的最伟大的工具。它允许我们以一种逻辑的方式来组织相类似的对象从而实现在具体编码时不必担心对象的具体类型;而且,我们只需要对一个所期望的接口或基类编程即可。一个应用程序越抽象,则它就显得越灵活--而多态性是对行为加以抽象的最好的方式之一。

      例如,让我们考虑一个叫Person的类。我们可以用称为David,Charles和Alejandro的类来子类化Person。Person有一个抽象方法AcceptFeedback(),所有的子类都要实现这个方法。这意味着,任何使用基类Person的子类的代码都能调用方法AcceptFeedback()。你不必检查该对象是一个David还是一个Alejandro,仅知道它是一个Person就够了。结果是,你的代码只需关注"最小公分母"-Person类即可。

      在这个示例中的Person类也可以被创建为一个接口。当然,与上面相比存在一些区别,主要在于:一个接口并没有给出任何行为,而仅确定了一组规则。一个Person接口要求的是"你必须支持AddFeedback()方法",而一个Person类可以提供一些AddFeedback()方法的缺省代码-你对之的理解可以是"如果你不选择支持AddFeedback(),那么你应该提供一种缺省实现。"至于如何选择接口或基类则并非本文的主题;但是,一般说来,你需要通过基类来实现一个缺省的方法。如果你能够简单地勾勒出你的类所要实现的一组期望的功能,那么你也可以使用一个接口。

      三、应用多态性设计

      我们将继续使用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,调用代码从不必了解具体类的功能,而仅知道基类就可以了。

    上一页12 下一页

    上一篇:大型系统上PHP令人不爽的九大原因  
    下一篇:在PHP中使用ASP.NET AJAX

    ·网友互动--用户名: (新注册) 密码: 匿名评论 [所有评论]
    评论内容:(用户发表意见仅代表其个人意见,评论内容与本站立场无关,请自觉遵守互联网相关政策法规)
    关注此文读者还看过
    • ·PHP实例:实现文件上传的程序源码
      ·在PHP中使用ASP.NET AJAX
      ·PHP 5.0中多态性的实现方案浅析
      ·大型系统上PHP令人不爽的九大原因
      ·初学入门 PHP 和 MySQL
      ·用Suhosin加强PHP脚本语言安全性
      ·完全讲解PHP+MySQL的分页显示示例分析
      ·PHP程序加速探索之服务器负载测试
      ·PHP5手动最简安装方法
      ·用SSH与PHP相连接 确保数据传输的安全性
    最新更新
    • ·PHP实例:实现文件上传的程序源码
      ·在PHP中使用ASP.NET AJAX
      ·PHP 5.0中多态性的实现方案浅析
      ·大型系统上PHP令人不爽的九大原因
      ·用Suhosin加强PHP脚本语言安全性
      ·完全讲解PHP+MySQL的分页显示示例分析
      ·PHP程序加速探索之服务器负载测试
      ·PHP5手动最简安装方法
      ·用SSH与PHP相连接 确保数据传输的安全性
      ·Apache+PHP+MySQL建立数据库驱动的动态网站
    文章关注度排行
    ·PHP开发一个完整、安全的用户登录系统
    ·PHP入门的学习方法
    ·PHP空白页面常见原因及解决方法
    ·Apache+PHP+MySQL建立数据库驱动的动态网站
    ·PHP常用正则表达式收集
    ·PHP学习入门的一些基础知识
    ·php命令行参数详解及应用
    ·提升PHP速度全攻略
    热点推荐
    PHP开发一个完整、安全的用户登录系统
    PHP开发一个完整、安全
    PHP入门的学习方法
    PHP入门的学习方法
    提升PHP速度全攻略
    提升PHP速度全攻略
    频道推荐
    • ·PHP开发一个完整、安全的用户登录系统
    • ·PHP入门的学习方法
    • ·PHP学习入门的一些基础知识
    • ·提升PHP速度全攻略
    本站精华
    PHP入门的学习方法
    PHP入门的学
    提升PHP速度全攻略
    提升PHP速度
    PHP开发一个完整、安全的用户登录系统
    PHP开发一个
    • ·PHP开发一个完整、安全的用户
    • ·提升PHP速度全攻略
    • ·PHP入门的学习方法
    • ·PHP学习入门的一些基础知识
    • | 网站导航 | 联系QQ | 编辑邮箱 | RSS订阅 | 友情链接 | 官方blog
    • 版权所有:IT技术江湖 @2007-2008
    • powered by www.hack1st.com online services. all rights reserved.京ICP备07005766号