Как получить автокомплит для расширенной реализации на основе интерфейса/абстрактного класса/класса? Есть библиотека , она работает с объектом . Зависимость внедрена через инъекцию, чтобы клиенты могли писать свои реализации . Проблема в том, что автокомплит идет для указанного типа, и даже если мы написали свою реализацию с расширенным апи то мы обламываемся на автокомплит. Как это вообще решается ?
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 ?

21 Авг 2019 в 07:06
194 +1
0
Ответы
1

Для того чтобы использовать автокомплит для расширенной реализации на основе интерфейса/абстрактного класса/класса, можно воспользоваться механизмом DocBlocks в PHPDoc.

Например, в вашем случае, чтобы получить автокомплит для метода charge() в классе ElectroCar, можно добавить PHPDoc комментарий к методу getMachine() в классе TaxiService:

/**
* @return ElectroCar
*/
public function getMachine()
{
return $this->machine;
}

Теперь, при использовании метода getMachine() в клиентском коде, автокомплит будет предлагать методы, доступные в классе ElectroCar, включая метод charge().

Надеюсь, это поможет вам решить проблему с автокомплитом для расширенной реализации в вашем проекте.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир