Если я вас правильно понимаю, вы хотите иметь единый способ выполнения общих операций над множеством объектов разного типа?
Чтобы сделать это в PHP, я хотел бы сделать две вещи - написать интерфейс, который определяет общие операции, а затем написать прокси-классы, которые, как вы упомянули, обертывают исходные объекты и реализуют интерфейс.
Например, если у вас есть эти классы:
class User {
public function getId() {
// Return some id
}
// Other user-specific stuff here
}
class Event {
public function getId() {
// Return some id
}
// Other user-specific stuff here
}
Вы можете написать интерфейс и два прокси-класса следующим образом:
interface FacebookObject {
public function getId();
}
class UserProxy implements FacebookObject {
function __construct($user) {
$this->user = $user;
}
function getId() {
return $this->user->getId();
}
}
class EventProxy implements FacebookObject {
function __construct($event) {
$this->event = $event;
}
function getId() {
return $this->event->getId();
}
}
А затем вы можете написать код, который работает на прокси FacebookObject:
function getFacebookId(FacebookObject $obj) {
return $obj->getId();
}