Básicamente, estoy creando dos clases en las que una clase, en este caso clase A, ejecuta una función en otra clase, en este caso clase B, para obtener información de la base de datos.Clase Constructor interfiriendo con otra clase
Sin embargo, cuando el B_runtime()
realmente llama a la base de datos obtengo el error Cannot access protected property A::$db
.
Lo que no entiendo es que a pesar de que tengo dos __construct
's en ambas clases de la declaración DOP está siendo muy persistente en el uso de la conexión a la base de la clase A.
Estoy seguro que esto tiene algo que hacer con el hecho de que estoy ejecutando el B_runtime()
desde la clase A porque esto no ocurre si lo llamo desde fuera de la clase A.
Sé que puedo simplemente cambiar el protected $db;
en la clase A a una variable pública Sin embargo, tengo mucha curiosidad sobre cómo puedo solucionar esto.
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'];
}
}
Lo siento por la larga cantidad de código - si alguien tiene alguna idea o sugerencia sería muy apreciada. Gracias.
Yea respuesta perfecta, sin embargo, hay una manera que yo puedo hacer esto con dos constructores como lo estoy haciendo ahora? – SineCosine
@SineCosine Puede mantener todos sus constructores. Acabo de poner una marca '// ...' donde está el constructor, todo sigue igual. Solo cambia el método ('A_runtime') y la forma en que lo llamas. – kapa
Oh, lo extrañé por completo. Gracias, no sabía que podrías esto. – SineCosine