Mil*_*jan 1 php oop class object laravel
我有一个A类,它扩展了B类
class A extends B{
function home(){
$site = new SitesController($this);
return $site->home();
}
}
Run Code Online (Sandbox Code Playgroud)
我希望此类中的每个变量都可以在SitesController类中使用.但是我不希望从A扩展SitesController,因为每次调用它都会重新初始化并且会有很多重复的查询调用.所以我尝试在创建类时传递$ this.但我不能像这样在SitesController中重新初始化$ this.
class SitesController implements SiteInterface
{
function __construct($data) {
$this = $data;
}
}
Run Code Online (Sandbox Code Playgroud)
无论如何我能做到这一点吗?谢谢.
你不能"重新分配"$ this.
但是您可以将A的实例指定为SitesController的属性,这意味着您可以从SitesController实例中访问A的所有公共方法/属性.
class SitesController implements SiteInterface
{
protected $A;
public function __construct(A $data) {
$this->A = $data;
}
public function doSomething() {
return $this->A->publicMethodOfA();
}
}
Run Code Online (Sandbox Code Playgroud)
这是"依赖注入",并且应用了Composition而不是Inheritence的原则