在Laravel中,我该如何非静态启动特征

Nur*_*yev 1 php model traits laravel eloquent

有什么原因为什么我们只有这种静态方式才能在Laravel中引导特征:

static function bootMyTrait ()
{...}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以启动特征并在启动功能中包含模型实例?像这样:

function bootMyTrait ()
{
    if ($this instanceOf awesomeInterface)
    {
        $this->append('nice_attribute');
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要这种自动对焦,并且很长一段时间都没有找到任何解决方案。

Ale*_*lov 5

Laravel 5.7开始,您可以使用特征初始化程序,而不是特征启动程序。我已经完成了相同的任务,并且能够像这样解决它:

public function initializeMyTrait()
{
    if ($this instanceOf awesomeInterface)
    {
        $this->append('nice_attribute');
    }
}
Run Code Online (Sandbox Code Playgroud)