PHP:在另一个类中调用抽象类方法

时间:2017-02-21 13:44:26

标签: php oop

我希望非常清楚!

我有dbFacile课程,他们获取,插入并使用我的数据库。

$db = dbFacile::open( 'mysql', DATABASE, USERNAME, PASSWORD, HOST );

$db->fetchRows('select * from my_stores')

我已经创建了另一个类,我希望从my_stores表中获取所有商店的$数组。

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,但该类是抽象的,我不能。

3 个答案:

答案 0 :(得分:1)

从它的github存储库的单元测试文件夹中,您可以看到新的用途是:

$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();

答案 1 :(得分:1)

您希望这样做的方法是通过其构造函数在$db类中注入Stores

class Stores {
  private $db;
  public function __construct(className $db) {
    $this->db = $db;
  }
}

其中className应该是dbFacile基类的完整命名空间类名。因此,每当您尝试使用错误的依赖项实例化Stores时,PHP都会抛出错误。

通过这种方式,您可以在Stores类中注入依赖项,并且可以在该类中的任何位置使用$ this-&gt; db。

答案 2 :(得分:0)

您可以通过构造函数将db对象传递到Stores。阅读有关依赖注入的内容。