Тип просто переносится в интерфейс. Безусловно нужен рефакторинг.
К примеру у тебя был класс А и Б
class A
{
public function a() {return 'a';}
}
class B extends A
{
public function b() {return $this->a().'b';}
}
Ты выносиш А в интерфейс и таким образом передаёшь в будующем как параметр не не класс, а интерфейс как тип. Рефакторинг выглядит таким образом:
interface A {
@return
public function a();
}
class Aimpl implements A
{
public function a() {return 'a';}
}
class B implements A
{
@var
private $aInst;
public function __construct(A $a) { $this->aInst = $a; }
public function a() {return $this->aInst->a();}
public function b() {return $this->a().'b';}
}
$a = new Aimpl;
$b = new B($a);
echo $b->b(). PHP_EOL;
echo (new B($b))->b();
То есть и тип имеется и парент А можно заменять любыми имплементациями, и эти имплементации мугут тестироваться отдельно.
_____________
↓↓↓↓↓↓↓↓↓↓ответ может быть здесьили в mysql_error();