我为PHP项目中的每个MySQL表都有一个单独的类。课程将是这样的:
class students {
public static function find_all() {
return self::sql_finder("SELECT * FROM ".get_class());
}
}
我在项目中使用的几乎所有表都使用相同的类,除了我将类名更改为表名。现在您可以看到我在类中使用的函数中使用了“get_class()”,因此SQL从类名中获取表名。
由于我在所有类中使用的类中包含太多函数,因此我计划使用类似于此类的子类扩展类:
class class_with_all_the_common_functions {
public static function find_all() {
return self::sql_finder("SELECT * FROM ".get_class());
}
}
class student extends class_with_all_the_common_functions {
// some table specific functions
}
现在,当我使用student::find_all()
时,它显示错误:
Database query failed: Table 'dr.class_with_all_the_common_functions
doesn't exist
我认为这说清楚了,我希望find_all()
在课堂学生中执行时执行。这是通过后期静态绑定可能实现的吗?
答案 0 :(得分:3)
你会发现两件有用的事情:
get_called_class()
代替get_class()
static::foo()
代替self::foo()
答案 1 :(得分:0)
您可以使用get_class(parent)
或使用表名创建私有字段,并仅在需要时将其重载:
class A {
private $table = 'A';
}
class B extends A {
public function getTable() {
return $this->table; //will return 'A'
}
}