Я пишу PHP-приложение с мыслью о тестируемости, поэтому мои классы всегда запрашивают у своих конструкторов «объекты коллабораторов», от которых они зависят, в отношении шаблона внедрения зависимостей.
Таким образом, я могу проходить макеты или тестовые реализации в моих модульных тестах.
Однако я хочу добиться того, чтобы иметь возможность создавать экземпляр класса с нулевыми значениями, передаваемыми его аргументам конструктора, для запуска резервного механизма, который создает класс реализации по умолчанию для каждого сотрудника.
Поскольку параметрам типа объекта не может быть присвоено значение по умолчанию в PHP, я должен сделать это внутри конструктора. Следующий код является примером подхода, который я сейчас использую:
class Engine
{
private $loader;
private $logger;
public function __construct(ResourceLoader $loader = null, Logger $logger = null)
{
if ($loader == null) $loader = new DefaultResourceLoader;
if ($logger == null) $logger = new DefaultLogger;
$this->loader = $loader;
$this->logger = $logger;
}
}
Что вы думаете об этом? Должен ли я вместо этого использовать контейнер IoC или есть другой способ присвоения аргументам типа объекта значения по умолчанию?