static :: $ model :: $ table - 如何实现这个?

时间:2011-09-16 14:31:39

标签: php static

场合

考虑我有以下类结构:

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

但不幸的是,这不起作用。 这可能吗?

3 个答案:

答案 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级