在寻找解决方案和模式后数小时,我该问专业人员了。
我想在逻辑层次结构中订购我的对象,但仍希望能够访问父对象的属性。一个简单的例子,我很乐意让它发挥作用......
class car {
public $strType; // holds a string
public $engine; // holds the instance of another class
public function __construct(){
$this->type = "Saab";
// Trying to pass on $this to make it accessible in $this->engine
$this->engine = new engine($this);
}
}
class engine {
public $car;
public function __construct($parent){
$this->car = $parent;
}
public function start(){
// Here is where I'd love to have access to car properties and methods...
echo $this->car->$strType;
}
}
$myCar = new car();
$myCar->engine->start();
我无法实现的是引擎中的方法可以访问“父”汽车属性。 我设法这样做,但我相信这非常非常丑陋...
$myCar = new car();
$myCar->addParent($myCar);
在addParent MethodI中,我可以将实例传递给引擎对象。 但那不可能是线索,可以吗?我的整个想法是不是很奇怪?
我不希望引擎继承汽车,因为汽车有很多方法和属性而引擎没有。希望你明白我的意思。
希望提示, 干杯鲍里斯
答案 0 :(得分:1)
正如@Wrikken所提到的,正确的语法是echo $this->car->strType;
type
似乎不是car
的成员,但如果您将其更改为
$this->strType = "Saab";
然后,有关陈述现在应该回应“萨博”
虽然我认为这里的好习惯是没有引擎类包含汽车对象,但是汽车类应该包含一个引擎对象。而private
的属性会更好。所以你可以有像
public startEngine() {
$success = $this->engine->start();
if(success) {
echo "Engine started successfully!";
} else {
echo "Engine is busted!";
}
}
engine::start()
返回布尔值。