In PHP the
extends keyword accepts only one class name after it, thus implying that multiple inheritance is not natively supported. However, sometimes it's preferable to have a class that inherits from different classes. To accomplish this task we need to use the __construct() method attached to any PHP class. Suppose that we have three classes, A, B, C where only the C class inherits directly from B:
class A
{
public $foo;
protected $bar;
private $baz;
public function __construct()
{
$this->foo = 'Foo';
$this->bar = 'Bar';
$this->baz = 'Baz';
}
public function __get($property)
{
return $this->$property;
}
}
class B
{
public $a = 'Lorem';
protected $b = 'Ipsum';
private $c = 'Dolor';
public function __get($prop)
{
return $this->$prop;
}
}
class C extends B
{
}
Now C inherits from B, but not from A. To fix this problem, we can call the A's constructor within the B's constructor:
class C extends B
{
public function __construct()
{
A::__construct();
}
}
Now C is linked to A. We can create a method within the last class to test everything out:
class C extends B
{
public function __construct()
{
A::__construct();
}
public function display()
{
$propArray = array($this->foo, $this->bar, $this->baz, $this->a, $this->b, $this->c);
$html = '';
foreach($propArray as $prop) {
$html .= '<p>' . $prop . '</p>' . "\n";
}
return $html;
}
}
A simple test:
$c = new C(); echo $c->display();
And here's the result:
This solution works fine as long as you define your properties within the constructor of the first class.
