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

}

クラスオブジェクトを返すメソッドを呼び出して、新しいクラスを開始できますか?問題のクラスにはたくさんのパラメーターがあり、bar()内で何度も呼び出す必要があるので、そのようにするといいと思いましたが、動作させることができず、可能かどうかを確認したいと思います+良い練習?

4

2 に答える 2

2

これはファクトリクラス(ファクトリOOデザインパターン)と呼ばれます。

PHPでの実行方法:http ://www.php.net/manual/en/language.oop5.patterns.php

于 2009-04-07T19:50:32.567 に答える
0

あなたが説明しているのはファクトリパターンですが、コンストラクターの場合と同じようにパラメーターを使用してクラス変数を設定しているので、それを使用しないのはなぜですか?

編集:

ああ、ほとんどの部分で同じパラメータを使用している場合は、間違いなくファクトリパターンが必要です。静的関数を使用してクラスのインスタンスを返し、それを返すクラスの型の中に入れてください。

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);
   }
}
于 2009-04-07T19:51:26.153 に答える