因此,在我的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
函数覆盖到其他东西?
答案 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();