У меня есть цикл для просмотра 2 класса, но проблема в том, что у него нет той же подписи один принимает вход конструктора 2, а другой принимает один вход как я могу исправить, зная, что я вынужден сделать цикл для
Я действительно не могу найти решение
это моя функция, где я помещаю цикл для
*/
public function run()
{
if (is_null($this->input) || empty($this->input)) {
throw new EmptyDataException("No data or empty data");
}
foreach ($this->extensions as $extension) {
$extensionProcess = "App\\Analyser\\Extension\\" . $extension->getCategory() . "\\" . $extension->getName();
$instance = new $extensionProcess($this->ruleManager, $this->analyseRuleManager);
$instance->setAnalyse($this->analyse);
$instance->input($this->input);
$instance->run();
}
}это 1 класс
/**
* Constructor.
*
* @param RuleManager $ruleManager
* @param AnalyseRuleManager $analyseRuleManager
*/
public function __construct(RuleManager $ruleManager,
AnalyseRuleManager $analyseRuleManager)
{
$this->ruleManager = $ruleManager;
$this->analyseRuleManager = $analyseRuleManager;
}это конструкция 2
/**
* Constructor.
*
* @param AnalyseManager $analyseManager
*/
public function __construct(AnalyseManager $analyseManager)
{
$this->analyseManager = $analyseManager;
}




У вас есть базовая проблема с внедрением зависимостей в Symfony, я рекомендую вам шаг за шагом прочитать документацию о служебный контейнер, это основная функция Symfony (и других фреймворков), и она очень важна.
Если вы определите свои расширения как службу после того, как вам не нужно будет вызывать конструктор. Если вы хотите получить одну из этих служб в зависимости от значения расширения, я бы создал другую службу под названием AnalyserExtensionFactory, которая будет выглядеть примерно так:
<?php
declare(strict_types=1);
namespace App\Analyser\Extension;
class AnalyserExtensionFactory
{
public function __construct(Class1 $class1, Class2 $class2)
{
$this->class1 = $class1;
$this->class2 = $class2;
}
public function getByExtension(Extension $extension) : ?ClassInterface
{
switch ($extension->getName()) {
case 'class1':
return $this->class1;
case 'class2':
return $this->class2;
}
return null;
}
}
И после использования этой фабрики в вашей функции run().
ClassInterface должен быть реализован в вашем Class1 и Class2 (и иметь методы setAnalyse, input и run)
Расширенный совет: эту фабрику можно сделать чище с помощью служебная маркировка