Предположим что есть некий обработчик, и нужен он в каждом классе определенного типа (все подтипы тоже нуждаются в этом обработчике).
<?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. Как можно выйти из этой ситуации? В каждый подтип передавать зависимость как то накладно, может можно например рефлексией выдернуть аргументы родителя, или еще как схитрить. Какие есть варианты?