本文均是摘抄自php核心技术与最佳实践这本书。
- 类的组合( 有两个类,一个是person类,一个是family类。在family类中创建person类的对象,把这个视为family类的一个属性,并调用它的方法处理问题,这种附庸方式叫组合。)
class person { public $name; public function run() { echo '我叫'.$this->name.'我在跑'; } public function say() { echo '我叫'.$this->name.'我在说'; } public function __construct($name) { $this->name = $name; } } class family { public $person; public function __construct($name) { $this->person = new person($name); } } $fam = new family('andy'); $fam->person->run();
- 类的继承,用继承实现上面的代码
class person { public $name; public function run() { echo '我叫'.$this->name.'我在跑'; } public function say() { echo '我叫'.$this->name.'我在说'; } public function __construct($name) { $this->name = $name; } } class family extends person { public $person; public function __construct($name) { parent::__construct($name); } } $fam = new family('andy'); $fam->run();
- 组合与继承的使用 组合与继承都是可提高代码重用性的手段。再设计对象模型时,可以按照语义识别类之间的组合关系和继承关系。作者通过总结得出了继承是一种“是,像“的关系,而组合是一种”需要“的关系。利用这个规律可以很简单的判断出父子应该是继承的关系,而家庭和成员应该是组合的关系。从方法复用的角度考虑,如果两个类具有很多相同的代码和方法,可以从这两个类中抽象出一个父类,提供公共方法,然后两个类作为子类,提供个性方法。
- 多态:同一类的对象收到相同消息时,会得到不同的结果。 多态是一种通过多种状态或阶段描述相同对象的编程方式。它的真正意义在于:实际开发中只要关心一个接口或基类的编程,而不必关心一个对象所属的具体类。
- 多态的实现:
判断传入的对象所属类的不同来调用其同名的方法,得出不同的结果。 另外一种实现方式<?php class employee{ protected function working(){ echo '本方法需重载才能运行'; } } class teacher extends employee{ public function working(){ echo '教书'; } } class coder extends employee{ public function working(){ echo '敲代码'; } } function doprint($obj){ if(get_class($obj)=='employee'){ echo 'Error'; }else{ $obj->working(); } } doprint(new teacher()); doprint(new coder()); doprint(new employee());
相比上一种通过判断对象所属类的实现方式,这个是通过接口来实现的多态,也符合”同一类型,不同结果”这一特征。interface employee{ public function working(); } class teacher implements employee{ public function working(){ echo '教书'; } } class coder implements employee{ public function working(){ echo '敲代码'; } } function doprint(employee $i){ $i $i->working(); } $a=new teacher; $b=new coder; doprint($a); doprint($b);