2013-06-12 2 views
1

Я новичок в шаблон фабрики и имею следующий фабричный метод:Factory шаблон для доступа статического метода

public static function build($class) { 
    $class = Helper::str_lreplace("_", "_" . System_Config::getConfig("ef_platform"), $class); 
    return new $class; 
} 

Как использовать тот же шаблон фабрики, но для статического метода? Например, я следующий метод вызывает:

Order_WooExport::registerActions(); 
    Order_WooExport::registerFilters(); 

, но я хочу назвать:

Order_WPExport::registerActions(); 
    Order_WPExport::registerFilters(); 

в зависимости от значения System_Config::getConfig("ef_platform");

+0

Статические заводы (и действительно статические anythings) являются antipattern. Вместо этого создайте экземпляр фабричного класса, который можно впрыснуть, поскольку это обеспечивает свободную связь. Если вы хотите набрать ключ для чего-то, используйте интерфейс. – DaveRandom

+0

[Пример описанного выше шаблона] (http://codepad.org/L1yqspQO). – DaveRandom

ответ

0

Предоставлено str_lreplace("_", "_" . System_Config::getConfig("ef_platform") дает theclass имя, которое вы хотите использовать и если вы используете PHP 5.3+, вы можете попробовать forward_static_call или что-то подобное:

$class = str_lreplace("_", "_" . System_Config::getConfig("ef_platform"); 
forward_static_call(array($class, 'registerActions')); 
forward_static_call(array($class, 'registerFilters')); 
Смежные вопросы