我想用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的新实现,他们如何知道如果无法执行它,那么运行需要返回特定类型的对象?