Has planteado mal el diseño desde el principio, aunque se puede arreglar.
Mira el ejemplo que acabo de hacer:
<?php
class A {
public $var1, $var2;
public function metodoClaseA() { }
}
class B extends A{
public $var3, $var4;
public function metodoClaseB() { }
}
class Heredero extends B {
public $var5;
public function metodoClaseHeredero() { }
}
$obj = new Heredero();
$obj->metodoClaseA(); //Funciona
Otra opción sería la siguiente:
<?php
class A {
public $var1, $var2;
public function metodoClaseA() { echo "estas en clase A"; }
}
class B {
public $var3, $var4;
public function metodoClaseB() { }
public function getMetodosClaseA() { return new A(); }
}
class Heredero extends B {
public $var5;
public function metodoClaseHeredero() { }
}
$obj = new Heredero();
$obj->getMetodosClaseA()->metodoClaseA();
La posible solución consiste en crear un objeto de la clase que no puedes heredar y usarlo dentro de esa clase.
Por ejemplo, si dentro de
RegistrarUsuario tienes que usar los métodos de
DB o
EnviarEmail sólo tienes que crear un objeto de una de
esas clases, dentro de
RegistrarUsuario.