Re: Multiple Inheritance Concern

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

 



Larry Garfield wrote:
> 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).
> 

Yes, I understand.  Thanks for taking the time to write up the example.

Thanks,
dK
`

-- 
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