Как я могу переопределить черту поставщика, которая использовалась поставщиком услуг поставщика? - PullRequest
0 голосов
/ 03 января 2019

Итак, в моем проекте 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 голосов
/ 03 января 2019

Вы не можете переопределить функцию независимо (), если она установлена ​​в приватное состояние.Я предполагаю, что функция является либо защищенной, либо общедоступной.

Если это так, Вы можете сделать что-то следующее.

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...