如何覆盖供应商服务提供商使用的供应商特征?

时间:2019-01-03 16:30:42

标签: laravel-5.7

因此,在我的laravel项目中,我正在使用某些软件包。我的问题是,我需要重写该程序包的服务提供者使用的特征(注意:特征和服务提供者都在vendor文件夹内)。如何安全地覆盖该特征?

要形象化它,

vendor / foo / bar / XYZ(在vendor文件夹内的特性)

trait XYZ
{
    private function whatever(){
        //default code
    }
}

vendor / foo / bar / ABC(供应商文件夹内的服务提供商)

class ABC extends ServiceProvider
{
    use XYZ;
    public function boot()
    {
        $this->whatever();
    }
}

我的问题是,我如何才能将whatever函数覆盖到其他东西?

1 个答案:

答案 0 :(得分:1)

您不能覆盖函数what(),只要将其设置为private。 我认为该功能是受保护的或公开的。

如果是这样,您可以执行以下操作。

trait XYZ
{
    public function whatever(){
        echo "hello ";
    }
}

class ABC extends ServiceProvider
{
    use XYZ;
    public function boot()
    {
        $this->whatever();
    }
}

// write this class somewhere in app folder. 
class OverrideWhatever extends ABC{
  function whatever() {
      echo parent::whatever().  "world"; 
  }
}


$test = new OverrideWhatever();
echo $test->whatever();