@dev400

Что делать, если нужно вызвать родительский конструктор с зависимостями?

Предположим что есть некий обработчик, и нужен он в каждом классе определенного типа (все подтипы тоже нуждаются в этом обработчике).
<?php

interface SomeHandlerInterface {

    public function checkParam( string $userName ) : string;

}


class SomeHandler implements SomeHandlerInterface{

    /**
     * @param string $userName
     * @return string
     * The method does something with the user name
     */
    public function checkParam( string $userName ) : string {

        return $userName;

    }

}


Мне бы хотелось объявить его в классе-родителе, и дергать в наследниках
class ParentClass {

    /**
     * @var SomeHandler
     */
    protected $someHandler;

    public function __construct(SomeHandlerInterface $someHandler) {

        $this->someHandler = $someHandler;

    }

}


но тогда мы вынуждаем себя делать так
class ChildClass extends ParentClass{


    public function __construct() {

        parent::__construct( new SomeHandler() );

    }

}


и убиваем di. Как можно выйти из этой ситуации? В каждый подтип передавать зависимость как то накладно, может можно например рефлексией выдернуть аргументы родителя, или еще как схитрить. Какие есть варианты?
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы