试图访问php中包含对象的属性

时间:2012-12-12 18:27:32

标签: php class

在寻找解决方案和模式后数小时,我该问专业人员了。

我想在逻辑层次结构中订购我的对象,但仍希望能够访问父对象的属性。一个简单的例子,我很乐意让它发挥作用......

    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中,我可以将实例传递给引擎对象。 但那不可能是线索,可以吗?我的整个想法是不是很奇怪?

我不希望引擎继承汽车,因为汽车有很多方法和属性而引擎没有。希望你明白我的意思。

希望提示, 干杯鲍里斯

1 个答案:

答案 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()返回布尔值。