PHP-access creator类';构造新类时的属性

PHP-access creator类';构造新类时的属性,php,class,oop,Php,Class,Oop,我正在尝试创建以下设置: class Car { public $brochure; public function getBrochure() { $this->brochure = new Brochure(); } } class Jeep extends Car { ... public $terrain = 'dirt'; } class SportsCar extends Car { ... publi

我正在尝试创建以下设置:

class Car {
    public $brochure;
    public function getBrochure() {
        $this->brochure = new Brochure();
    }
}

class Jeep extends Car {
    ...
    public $terrain = 'dirt';
}

class SportsCar extends Car {
    ...
    public $terrain = 'racing tracks';
}
然后,我想上宣传册课:

class Brochure {
    public $advertisement_text;
    public function __construct() {
        ...
        if($terrain) {
            $str = $str ."This car is best driven on $terrain!\r\n";
        }
        ...
        $this->advertisement_text = $str;
    }
}

显然,
$terrain
变量不存在。我总是可以将其作为参数传递,但我想知道是否可以访问creator类的公共属性而不传递它们?

最好在构造函数中传递变量,我已经更改了一些内容(我已经在代码中添加了注释,如果适用的话)

这将输出

This car is best driven on racing tracks!

如果您的手册需要一大堆数据,它可能会变得非常复杂,有时使用不同的方法可能会提供更多的未来证明,但这应该是一个开始。

访问其他类属性的问题是,它开始增加类之间的依赖性,有时,由于两个类相互调用太多,引用几乎变成循环引用,任何更改都可能破坏此系统。谢谢您提供的信息。不过,如果可能的话,我想知道怎么做?谢谢你,奈杰尔。我能理解你为什么要用这种方法来完成这样的任务。我很想知道还能怎么做。在您的评论中,您提到了依赖关系,我可以看出它是如何成为一个问题的。然而,有哪些选择?正如你所说的,这种方法会因为数据太多而变得很麻烦,所以我很想知道更多
When you create object of Brochure class pass argument of SportsCar class object like this:

class Brochure {
    public $advertisement_text;
    public function __construct($SportsCar) {
        ...
        if($terrain) {

            $str = $str ."This car is best driven on $SportsCar->$terrain!\r\n";
        }
        ...
    $this->advertisement_text = $str;
}


    $SportsCar=new $SportsCar();
    $Brochure =new $Brochure($SportsCar);
When you create object of Brochure class pass argument of SportsCar class object like this:

class Brochure {
    public $advertisement_text;
    public function __construct($SportsCar) {
        ...
        if($terrain) {

            $str = $str ."This car is best driven on $SportsCar->$terrain!\r\n";
        }
        ...
    $this->advertisement_text = $str;
}


    $SportsCar=new $SportsCar();
    $Brochure =new $Brochure($SportsCar);