2012-03-19 1 views
2

私は少し助けが必要です。私はちょうどメニューアイテム、および記事を変更するには、すべてこの内部を書き込むことができ、簡単なPHPインターフェースクラスを必要とするこれらの二つのPHPクラスこれらの2つのPHPクラスのインターフェイスを作っていますか?

class menu 
{ 
    public static function GetItems() 
    { 
     $res=array(); 
     $r=mysql_query("select * from menuitems"); 
     while($rw=mysql_fetch_row($r)) 
     $res[]=new MenuItem($rw[0],$rw[1],$rw[2],$rw[3]); 
     return $res; 
    } 
} 

そして第二に

class Articles 
{ 
    public static function Get() 
    { 
     $res=array(); 
     $r=mysql_query("select * from articles"); 
     while($rw=mysql_fetch_row($r)) 
      $res[]=new Articles($rw[0],$rw[1],$rw[2],$rw[3]); 
     return $res; 
    } 
} 

を持っています。基本的に私はインターフェイス

interface Base 
{ 
    $res=array(); 
    $r=mysql_query("select * from $base"); 
    while($rw=mysql_fetch_row($r)) 
     $res[]=new $base($rw[0],$rw[1],$rw[2],$rw[3]); 
    return $res; 
} 
} 

としてこのようなものを必要とし、他のクラスで私はクラスbazaを実装するためにMenuニーズ私はこの

class menu 
{ 
    public static function GetItems() 
    { 
     $baza="Articles"; 
    } 
} 

あなたは私が何を意味するか知ってcalllikeことができる何か、私のクラスを必要とします、そして$bazaがあっただけで、この文字列に置き換えられますか?

[OK]を、インターフェイスのことをすることはできませんが、私は同意するが、私は私の質問のための解決策が必要ですか?

+1

あなたのコードは全く意味がありません。どれでもない。インタフェースは単なる関数プロトタイプの集合です。そこにプログラミングロジックを置くことはできません。あなたのmenu :: GetItems()は何もしません。 –

+0

これは共通の基本クラスと静的メンバー変数で行うことができます(古いPHPの場合はいくつかのトリック) –

+0

"$ avariable :: get()を呼び出す方法は?" ?それとも、あなたは相続について混乱していますか? – AD7six

答えて

1

"インターフェイス"ではなく、継承を探しています。インタフェースは、それを実装するオブジェクトは特定のメソッドを持ちますが、そのためのボディを提供しなければならないと言います。あなたの場合は、具体的な方法がある抽象クラス(Get())と抽象メソッドGetTable()を使用すると、おそらく最も効果的です。

abstract class DatabaseObject { 

    abstract protected function GetTable(); 

    public function Get() { 
     $res=array(); 
     $r=mysql_query("select * from " . $this->GetTable()); 
     while($rw=mysql_fetch_row($r)) 
      $res[]=new $base($rw[0],$rw[1],$rw[2],$rw[3]); 
     return $res; 
    } 
} 

あなたはあなたのクラスでextendできます。たとえば、次のように

class menu extends DatabaseObject 
{ 
    protected function GetTable() 
    { 
     return 'menuitems'; 
    } 
} 

そして今、あなたは、テーブルの外にアイテムを取得するには、そのオブジェクトにGet()を使用することができます。

このようにすると、静的メソッドを使用できなくなるという欠点があります。クラスのインスタンスを作成する必要があります。

+0

Txanks、これは私が必要とするものです。なぜなら私は完全なディナミズムを持っているから、ベースの異なるテーブルから集まるクラスがたくさんあるからです。それは私がこのインターフェースについて尋ねた理由です。おそらくベースで行うインターフェースを作るためにできるのですか? –

+1

あなたは 'class menu EXTENDS DatabaseObject'を意味しませんでしたか? –

+0

はい、そのようなもの –

2

あなたが共通の基底クラスでこれを行うことができます。

class Base { 
    static $table=null; 

    public static function GetItems() 
    { 
     $table = static::$table; 
     //... 
    } 
} 

class Menu extends Base { 
    static $table="menu"; 
    //... 
} 
+0

これは良いasnwerもです –

関連する問題