好的,我需要一些帮助。我有这两个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
,只是用这个字符串替换?
好的,很多人说不能在界面上做到这一点,我同意,但我需要解决方案,对于我的问题?
答案 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()
来获取表格中的项目。
以这种方式执行此操作的缺点是您将无法使用静态方法 - 您必须创建类的实例。