Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
getChildren().getAllChildren().put, putAll и в этом духе, поэтому не хотелось менять порядок, т.к. суфикс all используется во многих местах.$file = $this->getPath() . 'conf/deps.json';
if (is_file($file))
$this->deps = json_decode(file_get_contents($file), true);

Во «взрослых» фреймворках уже давно реализованы конфигураторы, компилирующие на продакшне различные форматы конфига в php-файлы.
protected function getDoctrine_Dbal_DefaultConnectionService()
{
return $this->services['doctrine.dbal.default_connection'] = $this->get('doctrine.dbal.connection_factory')->createConnection(array('dbname' => 'test', 'host' => '127.0.0.1', 'port' => NULL, 'user' => 'root', 'password' => '', 'charset' => 'UTF8', 'driver' => 'pdo_mysql', 'driverOptions' => array()), new \Doctrine\DBAL\Configuration(), new \Symfony\Bridge\Doctrine\ContainerAwareEventManager($this), array());
}
P.S. Большой трейс — это не плохо, это хорошо, т.к. в данном случае показывается хорошую декомпозицию.
Конфиги не кешируются в Array(). Они компилируются в классы.
То, что где-то там у вас трейс длинный, а где-то нет — если вы нативное расширение PHP используете, то его выполнение для дебаггера прозрачно. Если контроллер пустой, то временные затраты на логику инстанциирования сервисов достигает не 50%, а всех 80-90.
Это нормально. Некоторые фреймворки специально задумывались для этого (Symfony).
Конечно я осознавал, что делая что-то сложное, я теряю в производительности. Но я еще исходил из того, что если мне нужно писать что-то крупное и нагрузочное у меня для этого есть Java, а php можно использовать только как Frontend.
В мире PHP достаточно много известных фреймворков, однако многие из них не подходят нам по многим критериям.
Regenix использует нестандартную модель загрузки классов, он не использует имена классов и их namespace для поиска их местоположения как сейчас принято делать в PHP. Class Scanner сканирует папки исходников на наличие в них классов. Что это означает? Для фреймворка есть понятия class paths (привет из Java), при добавлении нового источника классов (т.е. папки с исходниками), фреймворк производит сканирование и записывает всю найденную информацию о классах в кеш.
Для примера возьмем использование несуществующего класса в use (вывод ошибок во фреймворке)
Вот так, например, можно найти всех наследников класса за достаточно быстрое время (стоимость этой функции доли миллисекунды)
Менеджер зависимостей для assets, модулей и зависимостей composer
namespace controllers;
class Clients extends Controller
Модели — реализованы с помощью стороннего проекта — Propel ORM
regenix\deps
regenix\exceptions
regenix\lang
regenix\libs
regenix\logger
Новый нестандартный MVC фреймворк для PHP
Возможность блокировать использование супер-глобальных переменных ($_GET, $_POST, etc)
Regenix: Новый нестандартный MVC фреймворк для PHP