По сути, я просто создаю два класса, где один класс, в данном случае класс A, запускает функцию в другом классе, в данном случае классе B, чтобы получить некоторую информацию из базы данных.
Однако, когда B_runtime()
фактически обращается к базе данных, я получаю сообщение об ошибке Не удается получить доступ к защищенному свойству A::$db
.
Чего я не понимаю, так это того, что хотя у меня есть два __construct
в обоих классах, оператор PDO очень настойчиво использует соединение с базой данных из класса A.
Я уверен это как-то связано с тем фактом, что я запускаю B_runtime()
из класса A, потому что этого не происходит, если я вызываю его вне класса A.
Я знаю, что могу просто измените protected $db;
в классе A на общедоступную переменную, однако мне действительно любопытно, как я могу это исправить.
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'];
}
}
Извините за большой объем кода — если у кого-то есть какие-либо идеи или предложения, мы будем очень признательны. Спасибо.