我想用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的新實現,他們如何知道如果無法執行它,那麼運行需要返回特定類型的對象?