Реализация настраиваемой фабрики - PullRequest
0 голосов
/ 20 апреля 2010

У меня возникают трудности с поиском способа реализации «настраиваемого» поведения в классе фабрики в PHP.

У меня есть класс, который принимает другой класс в качестве аргумента в своем конструкторе. Класс аргумента может принимать несколько аргументов в своем конструкторе. Экземпляр моего основного класса может выглядеть примерно так

$instance = new MyClass(new OtherClass(20, true));
$instance2 = new MyClass(new DifferentClass('test'));

Это довольно неуклюже и имеет ряд проблем, и поэтому я хотел бы перенести это в фабричный класс. Проблема заключается в том, что этой фабрике каким-то образом необходимо знать, как создавать экземпляр класса аргументов, поскольку этот класс может иметь любое количество аргументов в конструкторе.

Желательно, чтобы я мог сделать что-то подобное

$instance = Factory::build('OtherClass');
$instance2 = Factory::build('DifferentClass');

И пусть фабрика получает аргументы из массива конфигурации или аналогичного.

1 Ответ

1 голос
/ 20 апреля 2010

Если вы храните список классов и их аргументы конструктора в виде массива. Что-то вроде:

array(
    'OtherClass' => array(20, true),
)

Затем вы можете построить класс, используя отражающий API и newInstanceArgs .

...