// Должен быть приватным
DependencyManager::$dependencies;
// Что это за хардкод?))
DependencyManager::__construct
// 1. Вы не проверяете аргументы, что будет, если я передам в $class
// например new \Exception()? А еще лучше строку "trololo"?
// 2. Нейминг - гуано, вы не проверяете зависимость, а возвращаете.
// 3. Если зависимость не найдена - будьте добры исключение.
DependencyManager::checkDependencies($class)
// Эта переменная не нужна, передавайте ее в метод
Loader::$className
// Эта переменная должна быть приватная, что будет, если туда вставить
// например строку и попытаться обработать?
Loader::$dependencyManager;
// Херня. У вас метод делает какую-то магию.
Loader::loadClass
Из SOLID вы нарушили:
* SRP - Loader выполняет И управление зависимостями и подгрузку. То что вы называете DependencyManager - это конфигурация, но ни как не менеджер зависимостей
* OCP - у вас явно открыты свойства, которые отвечают за внутреннюю логику выполнения. А то вот конфиги из вашей конфигурации зависимостей стоит возвращать через геттер
* ISP - вы в принципе не заморачиваетесь с интерфейсами, а полностью зависите от реализации.
Странно то, что загрузку не делаете рекурсивной, что если у вас у зависимого класса тоже есть зависимость?
Плохо то, что инициализируете сразу все классы, что если их будет много?
Еще пришла идея в классы с зависимостями передавать в аргументах интерфейсы, а не объекты.
Отличная идея)) как только в PHP появится инициализация интерфейсов - вернетесь к ней, а пока что забудьте.
Когда наиграетесь - выбрасывайте и переходите на
качественные решения, по совету
shaqster