为这两个PHP类创建接口?

时间:2012-03-19 12:30:35

标签: php class interface

好的,我需要一些帮助。我有这两个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;
    }
}

我需要一个简单的PHP接口类,可以在里面编写所有这些,只是为了更改MENUITEMS和文章。基本上我需要这样的东西作为接口

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

在另一堂课中,我需要一些我可以解决的问题

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

你知道我的意思,我的班级Menu需要实现班级baza,还有$baza,只是用这个字符串替换?

好的,很多人说不能在界面上做到这一点,我同意,但我需要解决方案,对于我的问题?

2 个答案:

答案 0 :(得分:2)

您可以使用公共基类执行此操作:

class Base {
   static $table=null;

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

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

答案 1 :(得分: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()来获取表格中的项目。

以这种方式执行此操作的缺点是您将无法使用静态方法 - 您必须创建类的实例。