Конструктор класса взаимодействует с другим классом

По сути, я просто создаю два класса, где один класс, в данном случае класс 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'];
    }
}

Извините за большой объем кода — если у кого-то есть какие-либо идеи или предложения, мы будем очень признательны. Спасибо.

5
задан SineCosine 6 April 2012 в 16:51
поделиться