2009-07-22 14 views
0

これはおそらく本当に簡単な答えですが、少しアドバイスをいただければ幸いです。オブジェクト指向の共通メソッド:インタフェース、抽象的なものなど

すべてのオブジェクトで同じload()メソッドとloadMultiple()メソッドを使用する小さなシステムがあります。それぞれのコードはまったく同じです。非常に単純な例です。

public static function load($id) { 
    // Instantiate the object 
    $object = new self($id); 
    return $object; 
} 

上記の例のコードは明らかにインターフェースに行くことができないが、私は(loadMultiple方法で同じ)オブジェクトをインスタンス化していてどちらも、それは抽象クラスで行くことができます。

これに対して最も洗練されたソリューションは何ですか?私は現在、次のような親クラスを作成する予定です:

class Object_Model { 
    public function load() { 
     // Code here 
    } 
    public function loadMultiple() { 
     // Code here 
    } 
} 

class Object1 extends Object_Model { 
} 

class Object2 extends Object_Model { 
} 

しかし、私はよりよい方法が必要であると確信しています。ある?クラスの名前はインスタンス化すると、そのID:

function load($class, $id) { 
    return new $class($id); 
} 

それはだあなたの現在のコードが静的メソッドを使用するので

答えて

0

私はIonutに同意します。これは従来の工場の方法と同じです。

<?php 
abstract class A 
{ 
    protected $id; 

    protected function __construct($id) 
    { 
    $this->id = $id; 
    } 

    final public static function factory($subclass, $id) 
    { 
    // Instantiate the object 
    if (is_subclass_of($subclass, __CLASS__)) 
    { 
     return new $subclass($id); 
    } 
    throw new Exception("$subclass is not a valid class for this factory."); 
    } 
} 

class B extends A{} 
class C extends A{} 
class D{} 

try { 
    $b = A::factory('B', 1); 
    $c = A::factory('C', 2); 
    $d = A::factory('D', 2); 
} 
catch (Exception $e) 
{ 
    echo "Oops! " . $e->getMessage(); 
} 

あなたはlate static bindingで何かを行うことができるかもしれないが、それは唯一の

+0

おかげでピーターを与えたLSB説明。 レイトスタティックバインディングは完全に見えます。しかし私は、私たちのサーバーがそれをサポートするとは思わない。 私はあなたとIonutが言っていることを理解していますが、私はとても優雅に近い5.3が提供しているときには、一歩後退のように思えます。 – PJE

0

、私は二つの引数を取る関数を持っているだけで罰金だろうと考えていますファンクションを使用してファクトリを実装するにはOKまたは、関数内で抽出できないロジックがありますか?

0

PHP 5.3を使用している場合、実際に親クラスと新しいstaticキーワードを使用して静的関数が呼び出された子のクラスを判別できます。

メソッドですべての設定タスクを実行している間に、試しただけで真のnew Object1($id);メソッドを使用することをお勧めします。あなたのコードは読みやすく、管理しやすくなります。

複数の例をロードすると、プロセスを迅速化するために別の関数に抽象化することができます。

+0

申し訳dcousineau PHP 5.3だ - ピーターは少し良くので、私は彼に答え – PJE

関連する問題