Yakında mix-ins eklemek için planları vardır, ben inanıyorum.
Ama o zamana kadar, kabul edilen yanıt ile gitmek. You can soyut olduğunu, bir "uzatılabilir" class yapmak biraz:
class Extendable{
private $extender=array();
public function addExtender(Extender $obj){
$this->extenders[] = $obj;
$obj->setExtendee($this);
}
public function __call($name, $params){
foreach($this->extenders as $extender){
//do reflection to see if extender has this method with this argument count
if (method_exists($extender, $name)){
return call_user_func_array(array($extender, $name), $params);
}
}
}
}
$foo = new Extendable();
$foo->addExtender(new OtherClass());
$foo->other_class_method();
Bu modelde o "OtherClass" yaklaşık $ foo 'bilmek' alır unutmayın. OtherClass bu ilişkiyi kurmak için "setExtendee" adında bir kamu görevi olması gerekir. Bu yöntemler $ foo çağrılması eğer Ardından, bu dahili $ foo erişebilirsiniz. Ancak, bir gerçek genişletilmiş sınıf yaptığınız gibi herhangi bir özel / korumalı yöntemler / değişkenlere erişim almazsınız.