Я пытаюсь использовать DI, чтобы поместить один объект в другой.Это легко, используя интерфейс и подсказку типа.
Проблема в том, что объект, который я внедряю, возвращает другой объект с одним из ожидаемых методов, и этот объект не может быть подсказкой типа.Проблема выглядит примерно так:
class Db implements DbInterface {
public function query($query) {
return new Result($query);
}
}
interface DbInterface {
public function query($query);
}
class Result {
public function getRow() {
// get row here
}
}
class SomeClass {
protected $data;
// injection is here
public function __construct(DbInterface $db) {
$result = $db->query($some_query);
$this->data = $result->getRow();
}
}
Я могу убедиться, что получил правильный объект DbInterface, но нет ли способа убедиться, что метод run () этого объекта возвращает объект правильного типа?Я посмотрел и не могу найти способ напечатать подсказку о возвращаемом результате функции.
Это может привести к проблемам позже в более сложном коде.Если кто-то напишет новую реализацию DbInterface, как он узнает, что run должен возвращать объект определенного типа, если нет способа его принудительно применить?