我有这样的结构:继承在PHP
abstract class Android {
public function __construct() {
}
public abstract function cost();
public function get_model(){
return "unkown model";
}
}
class HTC extends Android {
public function __construct() {
parent::__construct();
$this->model= "HTC";
}
public function get_model() {
return $this->model;
}
public function cost() {
return 500;
}
}
abstract class FeaturesDecorator extends Android {
public function __construct() {
parent::__construct();
}
public abstract function get_description();
}
class VideoCamera extends FeaturesDecorator {
private $android;
public function __construct($android) {
parent::__construct();
$this->android=$android;
}
public function get_description() {
return $this->android->get_model()." plus a video camera, ";
}
public function cost() {
return 200 + $this->android->cost();
}
}
class BigScreenSize extends FeaturesDecorator {
private $android;
public function __construct($android) {
parent::__construct();
$this->android=$android;
}
public function get_description() {
return $this->android->get_model()." plus a big size screen, ";
}
public function cost() {
return 100 + $this->android->cost();
}
}
采用以下模式后:
$android2 = new HTC();
$android2 = new BigScreenSize($android2);
$android2 = new LongLastingBattery($android2);
echo "<br/><br/>You have bought ".$android2->get_description()." for $".$android2->cost();
我得到
你买未知的品牌加上一个长只要$ 650
还是那句话:
我不知道为什么我得到Unknown brand
而不是HTC
从get_model()
通过get_description()
叫,而$650
被正确计算。
LongLastingBattery类? – LanguagesNamedAfterCofee 2012-07-16 19:53:53
您应该查看[this](http://blog.ircmaxell.com/2012/07/oop-vs-procedural-code.html)博客文章。在这种方法中使用'abstract class'使得它在PHP中不支持多重继承(至少不是这种方式)。这段代码需要重构,并采取与“抽象类”不同的方法。 – Whisperity 2012-07-16 20:11:50
hmmm ..感谢文章 – 2012-07-17 05:03:22