网页功能: 加入收藏 设为首页 网站搜索  
PHP5--类的多态性运用
发表日期:2005-03-26作者:[转贴] 出处:Chinaunix  

<?php
abstract class Obj
{
   protected $property = array();

   abstract protected function show();

   public function __call($name,$value)
   {
         if(preg_match("/^set([a-z][a-z0-9]+)$/i",$name,$array))
        {
            $this -> property[$array[1]] = $value[0];
            return;
        }
        elseif(preg_match("/^get([a-z][a-z0-9]+)$/i",$name,$array))
        {
            return $this -> property[$array[1]];
        }
        else
        {
            exit("<br>Bad function name '$name' ");
        }

   }
}

class User extends Obj
{
   public function show()
   {
       print ("Username: ".$this -> property['Username']."<br>");
       print ("Sex: ".$this -> property['Sex']."<br>");
       print ("Age: ".$this -> property['Age']."<br>");
   }
}

class Car extends Obj
{
  public function show()
  {
      print ("Model: ".$this -> property['Model']."<br>");
      print ("Sum: ¥".$this -> property['Number'] * $this -> property['Price']."<br>");
  }
}

$user =  new User;
$user -> setUsername("Anny");
$user -> setSex("girl");
$user -> setAge(20);
$user -> show();

print("<br><br>");

$car =  new Car;
$car -> setModel("BW600");
$car -> setNumber(5);
$car -> setPrice(40000);
$car -> show();
?>

解释:
基类Obj是一个抽象类, 他包装了类的set/get通用方法. 通用方法通过方法重载__call实现. 类包含一个抽象方法show(),因为对Obj来说, 未来要显示什么并未确定, 因此它只是一个抽像方法. 抽象类不能被实例化.

User是派生的一个实体类--用户类, 他重载了基类的show方法, 输出用户资料.
Car是派生的另一个实体类--汽车类, 他重载了基类的show方法, 输出购车金额.

我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 PHP5--类的多态性运用
本类热点文章
  用PHP验证邮箱是否真实有效
  PHP5的变化与PHP6展望
  用户IP、浏览器、操作系统
  基于PHP的聊天室(二)
  php调用mysql存储过程和函数的方法
  正则表达式在网络编程中的运用
  专家预言:PHP将比Java更受欢迎
  高效的中文字符串截取函数
  域名查询代码公布
  做个自己站内搜索引擎
  PHP初学者头疼问题总结
  基于PHP+MySQL的聊天室设计
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2019 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.0089