读书毕竟---继承与多态

2014-11-24 08:14:35 · 作者: · 浏览: 0
本文均是摘抄自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();

组合与继承的使用 组合与继承都是可提高代码重用性的手段。再设计对象模型时,可以按照语义识别类之间的组合关系和继承关系。作者通过总结得出了 继承是一种“是,像“的关系,而组合是一种”需要“的关系
。利用这个规律可以很简单的判断出父子应该是继承的关系,而家庭和成员应该是组合的关系。 从方法复用的角度考虑,如果两个类具有很多相同的代码和方法,可以从这两个类中抽象出一个父类,提供公共方法,然后两个类作为子类,提供个性方法。多态:同一类的对象收到相同消息时,会得到不同的结果。 多态是一种通过多种状态或阶段描述相同对象的 编程方式。它的真正意义在于:实际开发中只要关心一个接口或基类的编程,而不必关心一个对象所属的具体类。多态的实现:
  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); 
相比上一种通过判断对象所属类的实现方式,这个是通过接口来实现的多态,也符合”同一类型,不同结果”这一特征。