考虑我有以下类结构:
// a user model
class UserModel extends BaseModel {
protected static $table = 'Users';
}
// a controller for the user model
class UserModelController extends BaseModelController {
protected static $model = 'UserModel';
}
// a base model
class BaseModel {
protected static $table = '';
}
// a base model controller
class BaseModelController {
protected static $model = '';
}
我现在要做的是在基本控制器和基本模型中都有基本功能,例如将函数delete()
添加到BaseModelController
:
public static function delete($id) {
$stmt = Database::prepare('DELETE FROM `' . $table . '` WHERE `id`=?');
$res = $stmt->execute(array($id));
}
如何获取表名?从理论上讲,我正在寻找以下内容:
$table = static::$model::$table;
但不幸的是,这不起作用。 这可能吗?
答案 0 :(得分:4)
您需要将static::$model
保存到临时变量中:
$model = static::$model;
$table = $model::$table;
答案 1 :(得分:0)
假设您找到了一个放置您的线的地方,保护的可见性不是问题:
$class = static::$model;
$table = $class::$table;
答案 2 :(得分:0)
哈!你正在做的事情与我正在做的完全相同(又称PHP模型系统)(我正在以不同的方式做到这一点,但是:P)这是*&#的痛苦,只是你知道。
我相信你可以在PHP5.3中做$class_name::$static_property
但不能用2级