Thanks Nathan, I had already done that using the Objects of the 2 classes as
shown by you in the example 1.
but there are one thing in that.
If i create the Objects i cannot access the Protected Data from teh parent
classes.
On Thu, Feb 28, 2008 at 4:33 AM, Nathan Nobbe <[EMAIL PROTECTED]>
wrote:
> 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
>
--
Have A pleasant Day
Chetan. D. Rane
Location: India
Contact: +91-9986057255
other ID: [EMAIL PROTECTED]
[EMAIL PROTECTED]