Я работаю над приложением 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 ...
Было бы этохорошая идея?