По существу, я просто создаю два класса, в которых один класс, в этом случае класс A, запускает функцию в другом классе, в данном случае классе B, для захвата некоторой информации из базы данных.Класс конструктора, связанный с другим классом
Однако, когда B_runtime()
действительно звонит в базу данных, я получаю сообщение об ошибке Cannot access protected property A::$db
.
То, что я не понимаю, что даже если у меня есть два __construct
«с в обоих классах заявление ПДО настойчивыми об использовании подключения к базе данных из класса А.
Я уверен, что это что-то сделайте это с тем, что я запускаю B_runtime()
из класса А, потому что этого не происходит, если я вызываю его из-за пределов класса 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'];
}
}
Извините за длинный код - если у кого есть идеи или предложения, будем рады. Благодарю.
Да идеальный ответ, однако, есть способ, что я могу сделать это с двумя конструкторами, как я делаю сейчас? – SineCosine
@SineCosine Вы можете сохранить все свои конструкторы. Я просто поместил метку '// ...', где находится конструктор, все остается неизменным. Только метод ('A_runtime') и способ его изменения. – kapa
О, полностью пропустил это. Спасибо, я не знал, что ты это можешь. – SineCosine