Взгляните на PHP5.4 Черты они как бы решают проблему множественных расширений.
Объедините их с интерфейсами, чтобы получить экземпляр функциональности.
Например:
interface ClientAwareInterface {
public function setClient($client);
}
trait ClientAwareTrait {
protected $client;
public function setClient($client)
{
$this->client = $client;
}
}
class Shop implements ClientAwareInterface extends SomeClass {
use ClientAwareTrait; // use our trait to implement interface methods
use OtherTrait;
}
$shop = new Shop();
if($shop instanceof ClientAwareInterface) {
$shop->setClient('test');
var_dump($shop);
}
Результат будет:
object(Shop)[1]
protected 'client' => string 'test' (length=4)