0

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

我很想在逻辑层次结构中排序我的对象,但仍然希望能够访问父对象的属性。一个简单的例子,我希望它如何工作......

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

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

希望得到提示,干杯鲍里斯

4

1 回答 1

1

正如@Wrikken 提到的,正确的语法是echo $this->car->strType;

type似乎不是 的成员car,但如果您将其更改为

$this->strType = "Saab";

那么有问题的陈述现在应该呼应“萨博”

虽然我认为这里的好做法是不让引擎类包含汽车对象,但汽车类应该包含一个引擎对象。并且属性会更好private。所以你可以有一个 car 方法,比如

public startEngine() {
    $success = $this->engine->start();
    if(success) {
        echo "Engine started successfully!";
    } else {
        echo "Engine is busted!";
    }
}

Whereengine::start()返回一个布尔值。

于 2012-12-12T18:39:27.293 回答