PHP特征的目标是管理一堆逻辑。然而,根据一些专用属性并避免命名冲突,使这一堆逻辑能够工作的最好方法是什么?具有属性的特征
我在想MVC,特别是模型类。实际上,模型似乎是特征的良好候选者。模型可以实现树形结构,可绘制,可修改,可缩放等等。
我想编写这样的事:
class MyModel extends Model {
use Tree, Revision, Slug;
protected $_behaviors = array(
'Tree' => array('parentFieldname' => 'p_id'),
'Revision' => array(/* some options */),
'Slug' => array(/* some options */)
);
public function __construct() {
foreach($this->_behaviors as &$options) {
$options += /* trait defaults ? */
}
}
}
如果我打算设置树特征是这样的:
trait Tree {
protected $_defaults = array(
'parentFieldname' => 'parent_id',
/*...other options...*/
);
public function moveUp();
public function moveDown();
public function setParent(); //<- need the `'parentFieldname' => 'p_id'`attribute
/*...and so on...*/
}
我会深入到每个以来由于$_defaults
命名冲突特质需要它自己的默认值。使用特征的名称作为属性名称暗示使用类似(new ReflectionClass(__CLASS__))->getTraits())
......这不是很棒。
换句话说,有没有一种方法可以创建具有“可重写默认值”的特征并避免命名冲突?
,如果我错过了简单的方法,只是想知道(即使用命名约定或其他)来轻松配置/引入某些trait默认属性,并避免每次“手动”解决命名冲突。但似乎总是需要一个手动解决步骤的地方。 – Jails