static :: $ model :: $ table - как этого добиться? - PullRequest
2 голосов
/ 16 сентября 2011

Ситуация

Учтите, что у меня есть следующая структура классов:

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

4 голосов
/ 16 сентября 2011

Вам необходимо сохранить static::$model во временную переменную:

$model = static::$model;
$table = $model::$table;
0 голосов
/ 16 сентября 2011

Ха!Вы делаете то же самое, что и я (система PHP Model) (но я делаю это по-другому: P) Это боль в * & #, просто, чтобы вы знали.

Я считаю, что вы можете сделать $class_name::$static_property в PHP5.3, но не 2 уровня

0 голосов
/ 16 сентября 2011

Если вы нашли место для размещения своей строки, что защищенная видимость не является проблемой:

$class = static::$model;
$table = $class::$table;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...