本质上,我只是创建了两个类,其中一个类(在本例中为类 A)运行另一个类(在本例中为类 B)中的一个函数,以从数据库中获取一些信息。
但是,当 B_runtime()
实际调用数据库时,我收到错误消息 Cannot access protected property A::$db
。
我不明白的是,即使我在两个类中都有两个 __construct
,PDO 语句仍然非常坚持使用来自 A 类的数据库连接。
我确信这与我从 A 类内部运行 B_runtime()
这一事实有关,因为如果我从 A 类外部调用它,则不会发生这种情况。
我知道我可以简单地将 A 类中的 protected $db;
更改为公共(public)变量,但是,我真的很好奇如何解决这个问题。
ob_start();
include('/config.php');
ob_end_clean();
$A = new A($db);
$B = new B($db);
echo $A->A_runtime();
class A{
protected $db;
public function __construct($db){
$this->db = $db;
}
public function A_runtime(){
return B::B_runtime();
}
}
class B{
protected $db;
public function __construct($db){
$this->db = $db;
}
public function B_runtime(){
$preparedStatement = $this->db->prepare('SELECT * FROM z_mod_html WHERE ModuleLink = :moduleid LIMIT 1');
$preparedStatement->execute(array(':moduleid' => '1'));
$rows = $preparedStatement->fetchAll();
return $rows[0]['HTML'];
}
}
抱歉,代码量太大 - 如果有人有任何想法或建议,我们将不胜感激。谢谢。
最佳答案
您可以将 B 的实例传递给该方法。通过这种方式,您还可以定义方法对类 B 的依赖性。
$A = new A($db);
$B = new B($db);
echo $A->A_runtime($B);
class A{
//...
public function A_runtime($instance){
return $instance -> B_runtime();
}
}
您甚至可以使用 type hinting在 PHP 5 中表示您期望在那里有一个类 B 的实例:
public function A_runtime(B $instance){
关于php - 类构造函数干扰另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10046528/