Как я могу переместить это к поставщику услуг?
class AbstractFactory
{
/** @var array */
private $factories = [
"Generic" => Generic::class,
"first" => first::class,
"second" => second::class,
"third" => third::class,
];
public function __call($name, $arguments)
{
if (!isset($this->factories[$name])) {
throw new \Exception("Factory not found for type: $name");
}
$factory = app($this->factories[$name]);
return $factory->create(...$arguments);
}
}
Прямо сейчас каждая фабрика имеет различную реализацию интерфейса.
Хорошо, теперь я использую эту фабрику следующим образом.
abstract AbstractClass{
public function __construct()
{
$this->eventFactory = new AbstractFactory();
}
}
Как мы знаем, мы не можем создать экземпляр абстрактного класса.Есть ли какое-нибудь решение?