<?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方法, 输出购车金额.
|