[英]PHP: Call abstract class method in another class
我希望很清楚!
我有dbFacile類,該類可獲取,插入和使用我的數據庫。
$db = dbFacile::open( 'mysql', DATABASE, USERNAME, PASSWORD, HOST );
$db->fetchRows('select * from my_stores')
我創建了另一個類,希望從表my_stores中獲得所有商店的$ array。
class Stores {
public $s_table = 'my_stores';
public $rows;
public function get_all_stores (){
$this->rows = $db->fetchRows('select * from $this->s_table');
foreach($rows as $row) {
echo $row['name'] . '<br />';
}
}
}
我試圖在我的get_all_stores方法中啟動dbFacile,但是該類是抽象類,我不能。
從github存儲庫的unit tests文件夾中,您可以看到新的預期用法是:
$db = \dbFacile\factory::mysql();
$db->open(DATABASE, USERNAME, PASSWORD, HOST);
$db->fetchRows('select * from my_stores');
...
使用您的課程的示例:
class Stores {
private $s_table = 'my_stores';
private $db;
public function __construct($db)
{
$this->db = $db;
}
public function get_all_stores (){
$rows = $this->db->fetchRows(sprintf('select * from %s', $this->s_table));
//do your stuff with rows and maby return $rows
}
}
$db = \dbFacile\factory::mysql();
$db->open(DATABASE, USERNAME, PASSWORD, HOST);
//usage
$stores = new Stores($db);
$stores->get_all_stores();
您要執行的方法是通過其構造函數將$db
注入到Stores
類中
class Stores {
private $db;
public function __construct(className $db) {
$this->db = $db;
}
}
其中className應該是dbFacile基類的完整名稱空間類名稱。 這樣,每當您嘗試使用錯誤的依賴關系實例化商店時,PHP都會引發錯誤。
這樣,您就可以在Stores類中注入依賴項,並且可以在該類中的任何位置使用$ this-> db。
您可以通過構造函數將db對象傳遞到Stores中。 了解有關依賴項注入的信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.