Суть такая: я использую контейнер в режиме автовайринга и мне нужно в резольвере внедрить контейнер, чтобы помещать в него хендлеры для последующей поддержки автовайринга уже в них: PHP: class Resolver { private Container $container; public function __construct(Container $container) { $this->container = $container; } public function resolve(string|array $handler): callable { if (is_string($handler)) { return $this->container->get($handler); } [$controller, $action] = $handler; $controller = $this->container->get($controller); return [$controller, $action]; } } Если я просто вот так буду использовать этот класс, то получается я внедряю пустой контейнер (новый его экземпляр) - это правильно? Или мне нужно в автосборщике контейнера указать: PHP: return [ Resolver::class => fn($container) => new Resolver($container) ]; То есть правильно ли внедрять контейнер при автовайринге или нужно СУЩЕСТВУЮЩИЙ ЕГО экземпляр передать в нужное место? p.s. в контейнере пока не очень понимаю, гоняю пока разный код с его использованием, чтобы вникнуть на практике
у тебя ошибка на 10 строке. Ждешь результат callable, но в 20 массив --- Добавлено --- что находится ?
PHP: $controller = $this->container->get($controller); // загнали экземпляр класса в контейнер и получили его return [$controller, $action]; как-то так --- Добавлено --- @MouseZver в string - Class::class, в array - [Class::class, 'method']
@MouseZver ты реально не читал пост 3? ))) при возврате в $controller уже не строка, а экземпляр ($controller = $container->get($controller)), поэтому возвращается валидная callable, чувак ээээ будь внимательнее
@MouseZver ты же вроде вчера со мной не бухал за ВДВ смотри в string - Class::class, в array - [Class::class, 'method'] PHP: [$controller, $action] = [Class::class, 'method']; $controller = $this->container->get($controller); // $controller = $this->container->get(Class::class); return [$controller, $action]; // callable ))) PHP: return [$this->container->get(Class::class), $action]; // )))
ну ты даёшь дядя))) PHP: call_user_func([/* ку-ку ёпта */]); Что у нас тут - МАССИВ? Какой тип у него? ))) Массив может быть вызван, как функция, поэтому он - callable )))
@MouseZver контрольный PHP: class A{ public function test() { echo __METHOD__; } } $a = [new A(), 'test']; var_dump(is_callable($a)); // true $a(); // A::test троллинг засчитан
ох е6ать ниxуя се, callable тип умеет конвертировать/задействовать функционал. Я этого не знал, соррянчик.