Class inheritance or Containers?

Posted by m6w6 on 3rd August 2004 in Mike's sudden inspirations: PHP

While talking with Daniel and Lorenzo about “Tree Reincarnated” I regularly stumble across the question what approach to use to implement different backends: “Class inheritance or Containers?”.

I personally feel that using the container approach leads to massive code duplication, while using class inheritance avoids the most (most, because there’s no real multiple class inheritance in PHP).

Container

    class PublicAPI
    {
        var $container; // SpecificAPI

        function doSomething()
        {
            return $this->container->doSomething();
        }
    }

Class Inheritance

    class SpecificAPI extends PublicAPI
    {
        function doSomething()
        {
            // do something only this class needs to do
        }
    }
    ?>

So what do you feel about this topic and how you’d handle that?

UPDATE

While looking again at Daniel’s nice diagram, I feel like we’ve already reached the point where solving this problem with class inheritence is impossible (despite using aggregate*() - you’re right Lorenzo, again :) have nice holidays! ).

Tree_Admin_Simple_MDB2 would have to extend Tree_Simple_MDB2 and Tree_Admin_Simple_RDBMS…

Mike’s arrived at the dead end, again ;)