On Wed, Feb 27, 2008 at 12:05 PM, chetan rane <[EMAIL PROTECTED]>
wrote:
> Hi All
>
> Dose anyone know how to implement multiple inheritance in PHP 5.
> Interfaces dosent work . I have already Tried it.
the idea in a single inheritance language is to implement
'multiple inheritance' in the following way.
implement several interfaces an then compose a common
classes that implements said interfaces. this is the workaround
for single inheritance languages. here is a trivial example,
interface CommonStuff {
function commonFunction($a, $b);
function moreCommonFunction($x, $y, $z);
}
interface OftenUsed {
function imSpecial($c, $d);
function imMoreSpecial($u, $v, $w);
}
now you might have standard or common implementations
of these, sometimes referred to as mixins (taken from ruby,
i believe [<-- here i go again greg ;)])
class CommonStuffImpl implements CommonStuff {
function commonFunction($a, $b) {
return $a + $b;
}
function moreCommonFunction($x, $y, $z) {
return $x + $y + $z;
}
}
class OftenUsedImpl implements OftenUsed {
function imSpecial($c, $d) {
return $c - $d;
}
function imMoreSpecial($u, $v, $w) {
return $u - $v - $w;
}
}
and now finally for the multiple inheritance workaround;
suppose you have a class that needs to be both
CommonStuff and OftenUsed; you simply implement
both the interfaces, then delegate to the mixins, and
viola! multiple inheritance the single inheritance way ;)
class MultiInherit implements CommonStuff, OftenUsed {
private $commonStuffImpl = null;
private $oftenUsedImpl = null;
public function __construct() {
$commonStuffImpl = new CommonStuffImpl();
$oftenUsedImpl = new OftenUsedImpl();
}
/// now make sure to implement the interfaces and delegate
function commonFunction($a, $b) {
return $this->commonStuffImpl->commonFunction($a, $b);
}
function moreCommonFunction($x, $y, $z) {
return $this->commonStuffImpl->moreCommonFunction($x, $y, $z);
}
function imSpecial($c, $d) {
return $this->oftenUsedImpl->imSpecial($c, $d);
}
function imMoreSpecial($u, $v, $w) {
return $this->oftenUsedImpl->imMoreSpecial($u, $v, $w);
}
}
bear in mind i just typed that straight into my mail client, so it
might not be perfect, but you get the idea.
and also, dont forget about interface inheritance :)
interface Somethingable {
public function doSomething();
}
interface Crazyfiable {
public function getCrazy();
}
interface Extendable extends Somethingable, Crazyfiable {
public function extend();
}
class SuperClass implements Extendable {
public function doSomething() {
echo 'i did something ..' . PHP_EOL;
}
public function extend() {
echo 'i extended something..' . PHP_EOL;
}
public function getCrazy() {
echo 'im a crazy bastard now!' . PHP_EOL;
}
}
-nathan