会员: 密码:  免费注册 | 忘记密码 | 会员登录 网页功能: 加入收藏 设为首页 网站搜索  
技术文档 > Web开发 > PHP
PHP5--类的多态性运用
发表日期:2005-03-26 12:51:17作者: 出处: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方法, 输出购车金额.

返回顶部】 【打印本页】 【关闭窗口

关于我们 / 给我留言 / 版权举报 / 意见建议 / 网站编程QQ群   
Copyright ©2003- 2024 Lihuasoft.net webmaster(at)lihuasoft.net 加载时间 0.00386