Будут ли черты PHP хорошим решением? - PullRequest
2 голосов
/ 28 марта 2012

Я работаю над приложением MVC, в котором Модель реализована с использованием абстрактного базового класса, который должны расширяться всеми фактическими моделями.В каждой модели есть некоторая информация об этой модели, которая в настоящее время реализована в виде массива, пусть это будет protected static $info.Итак, каждая модель имеет свой массив $info.Теперь в базовом классе есть много функций, которые используют данные из этого массива, и в настоящий момент каждая из этих функций начинается с чего-то вроде функции save (), приведенной ниже.

abstract class BaseModel {
    function save(){
        $className = get_called_class();
        $modelInfo = $className::$info;
        /* lots of other stuff */
    }
}

class User extends BaseModel {
    protected static $info = array("tableName" => "tblUsers", etc...)
}

В моем понимании,это можно решить, сделав BaseModel признаком, а не конструктором, поскольку, когда признаки определяют свойства static, каждый наследующий класс имеет свои собственные значения.Я бы скопировал массив $info из реализации модели в черту, возможно, в конструкторе, чтобы я мог использовать self::info['tableName'] во всех функциях BaseModel ...

Было бы этохорошая идея?

1 Ответ

6 голосов
/ 28 марта 2012

Самый простой и подходящий инструмент для работы - использовать поздняя статическая привязка :

function save(){
    $modelInfo = static::$info;
    /* lots of other stuff */
}
...