繁体   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