簡體   English   中英

PHP:在另一個類中調用抽象類方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM