Re: Multiple Inheritance Concern

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Friday 25 December 2009 8:02:06 pm Daniel Kolbo wrote:
> Hello PHPers,
>
> I've learned that php doesn't support multiple inheritance, b/c if you
> need multiple inheritance usually it is a sign you've got a design
> imperfection...or so they say.
>
> Well, I'm using a framework (Codeigniter), and i'm extending the core
> libraries.  The trouble is, I want to also extend a second custom class,
> and I don't want to change the core codeigniter class definitions as
> this makes for awkward upgrades.
>
> I read about mixins - no thank you.  i do not want to even think about
> mixins as it looks like it would be the source of all debug hell...
>
> What's a programmer to do?  Is the only option i am really left with to
> duplicate the code in each class?
>
> Thanks,
> dK
> `

If the original author of one or both libraries did their job right, they'll 
have provided an interface as well as the class that implements it.  Then you 
can implement the interface and pass through to a new instance using 
composition.

To wit:

interface AInterface {
  public function doA();
}

interface BInterface {
  public function doB();
}

class A implements AInterface {
  public function doA() { ... }
}

class B implements BInterface {
  public function doB() { ... }
}

class YourClass extends A implements BInterface {

  protected $b;

  public function __construct() {
    $this->b = new B();
  }

  public function doB() {
    return $this->b->doB();
  }
}

(It would probably be a little more complicated in a real use case, but 
hopefully that should get you the idea.)

Mind you, that presumes that the code you're dealing with provides interfaces 
and when doing type checking checks against the interfaces rather than the 
classes themselves.  If they don't, you should file a bug against that base 
library as They're Doing It Wrong(tm).

-- 
Larry Garfield
larry@xxxxxxxxxxxxxxxx

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux