php-src/Zend/RFCs/004.txt
Sebastian Bergmann 1d6686c936 Add __delegate().
2002-06-11 08:06:02 +00:00

108 lines
2.3 KiB
Plaintext

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.
Default Delegation
Syntax / Example
<?php
class Foo {
function __delegate($name, $parameters = array()) {
echo $name;
}
}
$foo = new Foo;
$foo->bar(); /* prints "bar" */
?>
Semantics / Synopsis
If a class has a __delegate() method, it is called whenever a
method on an object of this class is called that is
* Not defined in the class.
* Not provided by a delegatee object.
The __delegate() method is called with the name and parameters
of the method call.
This supersedes / obsoletes similar functionality introduced in
Zend Engine 1 by ext/overload.