как я могу оптимизировать код моей черты, чтобы избежать наличия двух атрибутов с одинаковым значением в дочернем классе - PullRequest
0 голосов
/ 30 марта 2020

У меня есть этот код, и что-то мне кажется неправильным. Дело в том, что мне нужно присвоить одно и то же значение двум разным атрибутам. Один из моей черты, а другой из моего текущего класса.

Я могу sh Я мог бы полностью изолировать свою черту, и мне не пришлось делать это назначение в конструкторе моего дочернего класса.

Код:

interface ARepoInterface extends BaseRepoInterface {}

interface BRepoInterface extends BaseRepoInterface {}


trait Foo {
    protected BaseRepoInterface $repo;

    public function method(array $array): void {
      // Do stuff with $repo
    }
}

class A
{
    private ARepoInterface $ARepo;
    protected BaseRepoInterface $repo;

    use Foo;

    public function __construct(ARepoInterface $ARepo)
    {
        //@todo This is weird
        $this->ARepo = $this->repo = $ARepo;
    }
    //Other methods
}

class B
{
    private BRepoInterface $BRepo;
    protected BaseRepoInterface $repo;

    use Foo;

    public function __construct(BRepoInterface $BRepo)
    {
        //@todo This is weird
        $this->BRepo = $this->repo = $BRepo;
    }
    //Other methods
}

Заранее благодарю за совет

1 Ответ

0 голосов
/ 30 марта 2020

На самом деле PHP не особо заботится о подсказке типа, поэтому вам достаточно одного свойства.

interface ARepoInterface extends BaseRepoInterface { public function A(); }

class A
{
    use Foo;

    public function __construct(ARepoInterface $ARepo)
    {
        $this->repo = $ARepo;
    }

    public function methodDoStuffWithARepoInterface()
    {
        $this->repo->A();
    }
}

И не волнуйтесь, intellisense все еще работает.

...