如何访问子类特征中的父类属性



我有一个扩展Foo的类SpecificFoo。SpecificFoo具有$bar属性,它是类bar的一个实例。当我使用来自SpecificFoo's Bar的trait Baz时,如何访问SpecificFoo的id?

class Foo {
public $id;
public $bar;
}
class SpecificFoo extends Foo{
public $id = 'specific';
public $bar = new Bar();
}
class Bar {
use Baz;

}
trait Baz {
public function someMethod() {
dd($this->id); //need the id of SpecificFoo here
}   
}
(new SpecificFoo())->bar->someMethod();

设计上不能,但我可能会将SpecificFoo作为对Bar的引用来传递,以保留您缺少的引用。由于您不能在类定义中将其作为引用传递,所以我会做一个setter。

class SpecificFoo extends Foo{
public $id = 'specific';
public $bar;
public function setBar()
{
$this->bar = new Bar($this);
}
}
class Bar {
protected $origin;

public function __construct($origin) 
{
$this->origin = $origin
}
}

现在,您可以访问您的特性中的属性。命名可以更改,但感觉起源很合适。

trait Baz {
public function someMethod() {
dd($this->origin->id);
}   
}

最新更新