科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件PHP的面向对象编程

PHP的面向对象编程

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在PHP编程中, 我们经常会遇到一些直接产生输出的函数,如passthru(),readfile(),var_dump() 等....

作者:李乔 来源:yesky 2007年10月26日

关键字: Linux

  • 评论
  • 分享微博
  • 分享邮件
恢复了成员数据,但是不包括方法。这导致了只能通过类似于使用$obj2->x来存取成员变量的唯一办法。

  如何使用类进行数据存储?

  对于PHP和OOP,可以很容易地定义一个类来操作某件事情,并且无论何时你想用的时候都可以调用相应的类。我们可以使用OOP或PHP来减少编码并提高质量。

  定义一个产品的类,定义它应该有的方法(例如:显示),然后定义对每一种类型的产品的类,从产品类派后出来(SoundItem类,ViewableItem类,等等),覆盖在产品类中的方法,使它们按我们的预想运作。

  根据数据库中每一种产品的类型(type)字段给类命名,一个典型的产品表可能有(id, type, price, description)等等字段,然后在处理脚本中,可以从数据库中取出type值,然后实例化一个名为type的对象:
    
    <?php
    $obj=new $type();
    $obj->action();
    ?>

  这是PHP的一个非常好的特性,不用考虑对象的类型,调用$obj的显示方法或其它的方法。不需要修改脚本去增加一个新类型的对象,只是增加一个处理它的类。

  当创建一个$obj的对象时,可以通过$obj2=$obj来拷贝对象,新的对象是$obj的一个拷贝(不是一个引用),所以它具有$obj在当时的状态。有时候,只是想生成一个象obj类一样的一个新的对象,可以通过使用new语句来调用类的构造函数。在PHP中也可以通过序列化,和一个基类来实现,但所有的其它类都要从基类派生出来。

  当序列化一个对象,会得到某种格式的字符串,其中,字符串中有类的名字,可以把它取出来,比如:
    
    <?php
    $herring=serialize($obj);
    $vec=explode(':',$herring);
    $nam=str_replace("\"",'',$vec[2]);
    ?>

  所以假设创建了一个"Universe"的类,并且强制所有的类都必须从universe扩展,可以在universe中定义一个clone的方法,如下:
    
    <?php
    class Universe {
      function clone() {
        $herring=serialize($this);
        $vec=explode(':',$herring);
        $nam=str_replace(""",'',$vec[2]);
        $ret=new $nam;
        return $ret;
      }
    }

    //然后
    $obj=new Something();

    //从Universe扩展
    $other=$obj->clone();
    ?>

  所得到的是一个新的Something类的对象,它同使用new方法,调用构造函数创建出的对象一样。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章