Есть библиотека , она работает с объектом . Зависимость внедрена через инъекцию, чтобы клиенты могли писать свои реализации . Проблема в том, что автокомплит идет для указанного типа, и даже если мы написали свою реализацию с расширенным апи то мы обламываемся на автокомплит. Как это вообще решается ?
UPD. Мы можем как угодно менять реализацию TaxiService, но когда мы выкладываем ее в opensource, то клиенты разумеется не должны менять исходники, чтобы получить свои плюшки (автокомплит для своих реализаций).
interface Machine
{
public function go();
}
class Car implements Machine
{
public function go()
{
// TODO: Implement go() method.
}
}
class ElectroCar extends Car
{
public function charge()
{
}
}
class TaxiService
{
protected $machine;
function __construct(Machine $machine)
{
$this->machine = $machine;
}
public function getMachine()
{
return $this->machine;
}
}
$taxi = new TaxiService(new ElectroCar());
$taxi->getMachine()->// как получить charge ?