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