在PHP/Laravel中重新分配$ this

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)

无论如何我能做到这一点吗?谢谢.

Mar*_*ker 7

你不能"重新分配"$ 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的原则

  • @Daan - 纯粹是为了方便来自SitesController的任何未来扩展....作为一般原则,如果它绝对需要私有,我只会私有化 (3认同)