Получается ли $ _schema в Lithium parent & amp; детская модель?

Мы все знаем, что функции наследуются, но как насчет защищенных $_schema литиевой модели?

Например, у меня есть:

class ParentModel extends Model {
protected $_schema = array(
'name' => array('type' => 'string'),
'address' => array('type' => 'string'),
);
}

class ChildModel extends ParentModel {
protected $_schema = array(
'mobile' => array('type' => 'string'),
'email' => array('type' => 'string'),
);
}

Интересно при сохранении ChildModel запись, будет ли $_schema из ChildModel в сочетании с $_schema из ParentModel? Это:

array(
'name' => array('type' => 'string'),
'address' => array('type' => 'string'),
'mobile' => array('type' => 'string'),
'email' => array('type' => 'string'),
);

Как я могу проверить, так ли это?

Большое спасибо

2

Решение

Обычно в PHP переменные, определенные таким образом, переопределяют значение по умолчанию родительского класса для того же класса. Тем не менее, литиевые модели есть код который перебирает родителей и объединяет их значения по умолчанию для $_schema и все остальные переменные, перечисленные в $_inherits и значения по умолчанию, возвращаемые Model::_inherited(),

Вот код для этого в версии 1.0 бета

/**
* Merge parent class attributes to the current instance.
*/
protected function _inherit() {
$inherited = array_fill_keys($this->_inherited(), array());
foreach (static::_parents() as $parent) {
$parentConfig = get_class_vars($parent);
foreach ($inherited as $key => $value) {
if (isset($parentConfig["{$key}"])) {
$val = $parentConfig["{$key}"];
if (is_array($val)) {
$inherited[$key] += $val;
}
}
}
if ($parent === __CLASS__) {
break;
}
}
foreach ($inherited as $key => $value) {
if (is_array($this->{$key})) {
$this->{$key} += $value;
}
}
}
/**
* Return inherited attributes.
*
* @param array
*/
protected function _inherited() {
return array_merge($this->_inherits, array(
'validates',
'belongsTo',
'hasMany',
'hasOne',
'_meta',
'_finders',
'_query',
'_schema',
'_classes',
'_initializers'
));
}

Вот некоторые из модульных тестов, которые охватывают эту функциональность: https://github.com/UnionOfRAD/lithium/blob/1.0-beta/tests/cases/data/ModelTest.php#L211-L271

3

Другие решения

Как ответили на вопрос GitHub, который вы открыли, да.

0

По вопросам рекламы [email protected]