наверное можно было бы сделать это аналогично тому как в Unity у GameObject назначаются компоненты. то есть универсальные объекты для всего всего и к ним добавляются любые компоненты которые модифицируют их поведение.
StdClass нельзя добавлять методы.
когда вижу подобный код, меня прям трясет.
это вам не js, здесь вы можете создавать нормальные человеческие именованные классы.
UPD: только лишь в спортивных целях покажу как может работать
$f = $obj->fn->move;
print_r($f(1,2));
то есть функция все таки сохраняется. но новый метод у класса не добавляется.
из опыта лучше всего использовать DI (Dependency Injection).
то есть, есть конфиг, где указаны парметры redis для кешера.
и есть конфиг DI где указано как создавать объекты Redis и RedisCache. скорее всего Redis объект будет передаваться в контруктор RedisCache.
Хотя в случае с DI, вы сможете безболезненно переделать любой вариант в любой другой на любом этапе разработки.
а также например в какой то момент у вас будет один инстанс редиса для всех целей на весь проект (и не нужно делать копии обьекта Redis, с отдельными соединениями), но вы легко можете только через конфиг переделать и выделить ему отдельный инстанс для кеша.
Но я бы хотел, чтобы при наследовании такого абстрактного класса запускалась функция типа конструктора, без вызова конструктора в дочернем классе, как у меня в примере. Возможно ли такое?
если заморочится то можно, но это антипаттерн. требовать что дочерний конструктор обязан вызвать родительский - это норма.
любой адекватный разработчик конечной логики, обязан смотреть конструкторы и разбираться или он сам все инитит или просто вызывает родительский. тем более что родительский может еще и параметры принимать.
в Vendor\Core\Loader\AbstractLoader
не нужно писать
use Vendor\Core\Loader\LoaderInterface;
тк неймспейс у них один, просто исопльзуйте LoaderInterface
Скачай хороший фреймворк (рекомендую Symfony) и начни на нем что нибудь делать - хотя бы простое - список todo для себя.
там у тебя не получится писать процедурно - со временем на практике так и поймешь для чего все это.
а так бывает люди пишут классами (static методами или singleton (ну ладно singleton, еще более менее)) и думают что это уже ООП