Iniciovat třídu tím, že volá funkci, která vrátí instanci této třídy - PHP?

hlasů
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;
   }

}

Mohu zahájit novou třídu tím, že volá metodu, která vrací objekt třídy? Třída dotyčný má spoustu parametrů a musím volat to vícekrát v rámci řádku (), tak jsem si myslel, že to bude čistější to dělat takhle, ale nemohu si to pracovat a chtějí zjistit, jestli je to možné, + dobrá praxe?

Položena 07/04/2009 v 20:48
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
2

Tomu se říká tovární třída ( Factory OO návrhový vzor ).

Jak by mělo být provedeno v PHP: http://www.php.net/manual/en/language.oop5.patterns.php

Odpovězeno 07/04/2009 v 20:50
zdroj uživatelem

hlasů
0

Co si myslím, že jste popisující je Factory vzor, ​​ale používáte parametry nastavit proměnné třídy stejně jako vy by se v konstruktoru, tak proč ne jen používat, že?

Upravit:

Ah, pokud používáte stejné parametry ve většině případů pak budete určitě chtít Factory vzor. Stačí použít statickou funkci vrátit instance třídy, a dát ji do formy nebo třídy vracíte:

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);
   }
}
Odpovězeno 07/04/2009 v 20:51
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more