我有一个扩展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);
}
}