--- /dev/null
+Title: Delegation
+ (a/k/a. Object-Based Inheritance)
+Version: $Revision$
+Status: draft
+Maintainer: Sebastian Bergmann <sb@sebastian-bergmann.de>
+
+
+Dynamic Delegation
+
+ Syntax / Example
+
+ <?php
+ class aDelegatee {
+ function doSomething() {
+ echo 'hubu';
+ }
+ }
+
+ class anotherDelegatee {
+ function doSomething() {
+ echo 'tubu';
+ }
+ }
+
+ class Foo {
+ delegatee $bar;
+
+ function setDelegatee($delegatee) {
+ $this->delegatee = $delegatee;
+ }
+ }
+
+ $foo = new Foo;
+
+ $foo->setDelegatee(new aDelegatee);
+ $foo->doSomething(); /* prints "hubu" */
+
+ $foo->setDelegatee(new anotherDelegatee);
+ $foo->doSomething(); /* prints "tubu" */
+ ?>
+
+ Semantics / Synopsis
+
+ The "Foo" class may use all methods available in "$bar" as if they
+ where locally defined or inherited from a superclass. The essential
+ difference is that by assigning another object to "$bar" it is
+ possible to dynamically switch between different implementations for
+ these methods.
+
+
+Fixed Delegation
+
+ Syntax / Example
+
+ <?php
+ class aDelegatee {
+ function doSomething() {
+ echo 'hubu';
+ }
+ }
+
+ class Foo {
+ final delegatee $bar = new aDelegatee;
+ }
+
+ $foo = new Foo;
+
+ $foo->doSomething(); /* prints "hubu" */
+ ?>
+
+ Semantics / Synopsis
+
+ The "Foo" class may use all methods available in "$bar" as if they
+ where locally defined or inherited from a superclass. The difference
+ to the dynamic delegation is that once the delegatee object is set,
+ it cannot be changed.