0

この方法でしょうか

    foreach($data as &$d)
       $obj[]=ClassName::createObject($data);

また

    foreach($data as &$d){
       $obj[] = new ClassName;
       $obj[end($obj)]->loadData($data);
     }

-

     class ClassName{
        public static function createObject($data){
              $obj = new ClassName;
              //do stuff with $data
              return $obj;
        }

        public function loadData($data){
              //do stuff with $data;

        }

     }

:: createObjectメソッドを使用すると、コードの読み取りが大幅に軽減されますが、2番目のメソッドは巨大なオブジェクトを返す必要がありません。PHPのような言語で変数がどのように処理されるかわからないので、パフォーマンスに大きな違いはありますか?どの方法を使用するのが最適ですか?

4

2 に答える 2

2

最初は大丈夫そうです。$dこの場合、参照で渡す必要はありません。そしておそらくあなたはしたいですClassName::createObject($d)。それでも私はそれを次のようにリファクタリングします:

foreach($data as $d) {
   $obj[]=new ClassName($d);
}

これは、パフォーマンス上の理由ではなく、単に醜いです。

foreach($data as &$d){
   $obj[] = new ClassName;
   $obj[end($obj)]->loadData($data);
 }

代わりに、これを行うことができます:

foreach($data as &$d){
   $object = new ClassName;
   $object->loadData($d);
   $obj[] = $object;
 }

データがオブジェクトに不可欠である場合は、構成から設定します。データがオプションの場合、このloadData方法は理にかなっています。ただし、構成ロジックを静的メソッドに移動する場合、これは無意味です。パフォーマンス上の利点はありません。

于 2012-12-19T14:44:50.693 に答える
0

静的な方法には何の利点もありません。staticとしてのファクトリメソッドは、機能的にはnewキーワードと同じです(これもstaticです)。1行のコードを保存することをお勧めしますが、オブジェクトの構築後に常にオブジェクトに対して-> loadData()を呼び出す必要がある場合は、コンストラクターにデータを渡す必要があります。

$obj = new ClassName($data);

このインスタンスで静的メソッド呼び出しを使用しても問題は解決せず、単純に複雑さ/肥大化を追加します。

于 2012-12-19T14:44:40.770 に答える