Инициировать класс, вызвав функцию, которая возвращает экземпляр этого класса - PHP? - PullRequest
0 голосов
/ 07 апреля 2009
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;
   }

}

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

Ответы [ 2 ]

2 голосов
/ 07 апреля 2009

Это называется фабричным классом ( Factory OO Design Pattern ).

Как это должно быть сделано в PHP: http://www.php.net/manual/en/language.oop5.patterns.php

0 голосов
/ 07 апреля 2009

Я думаю, что вы описываете шаблон Фабрики, но вы используете параметры для установки переменных класса так же, как в конструкторе, так почему бы просто не использовать это?

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);
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...