2009-04-07 3 views
0
class foo(){ 

    function bar() 
    { 
    $classInstance = $this->createClassInstance($params); 
    $result = $classInstance->getSomething(); 
    } 

    function createClassInstance($params) 
    { 
    require 'path/to/class.php'; 
    $myClass = new Class; 
    $myClass->acceptParams($params['1']); 
    $myClass->acceptMoreParams($params['2']); 
    .... lots more params 
    return $myClass; 
    } 

} 

Можно ли инициировать новый класс, вызвав метод, возвращающий объект класса? У класса, о котором идет речь, есть много параметров, и мне нужно называть его несколько раз в баре(), поэтому я подумал, что это будет более аккуратно, но я не могу заставить его работать и хочу проверить, возможно ли это + хорошо практика?Инициировать класс, вызывая функцию, возвращающую экземпляр этого класса - PHP?

ответ

0

То, что я думаю, что вы описываете шаблон Factory, но вы используете параметры, чтобы установить переменный класс, как вы бы в конструкторе, так почему не просто использовать это?

Edit:

Ах, если вы используете одни и те же параметры, по большей части, то вы определенно хотите шаблон Factory. Просто используйте статическую функцию для возврата экземпляра класса и поместите его в тип возвращаемого класса:

class MyClass 
{ 
    public static function factory($params) 
    { 
     $myClass = new MyClass; 
     $myClass->acceptParams($params['1']); 
     $myClass->acceptMoreParams($params['2']); 
     //.... lots more params 
     return $myClass; 
    } 
} 

class foo(){ 

    function bar() 
    { 
    $classInstance = MyClass::factory(param1, param2); 
    } 
} 
+0

потому что класс требуется 4 раза в баре() с примерно 30 параметрами, которые все то же самое, кроме 1, 4x30 = много дубликатов кода ... – ed209