1. Почему переменная $this->db позволила переназначить себя? в классе Main. Она ведь protected у родителя.
2. В целом код не сильно "ужасен"?)
class App{
protected $db;
protected $get = array();
protected $post = array();
public function __construct(){
$this->db = new DB();
$obj = new regGet();
$this->get = $obj->get();
}
}
class regGet{
private $a = array();
public function __construct(){
$this->set();
}
private function set(){
if(!empty($_GET)){
foreach($_GET as $k => $v){
$this->a[$k] = $v;
}
}
}
public function get(){
return $this->a;
}
}
class DB{
private $db = null;
public function __construct(){
$this->instance();
}
public function instance(){
try{
$this->db = new PDO('mysql:host=localhost;dbname=test','root','');
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
die('DB ERROR');
}
}
public function query($query){
return $this->db->query($query);
}
public function prepare($query){
return $this->db->prepare($query);
}
public function __destruct(){
$this->db = null;
}
}
class Main extends App{
public function test(){
$this->db = 11111; //переназначение
var_dump($this->db);
$stmt = $this->db->query("SELECT * FROM `tab`");
return $stmt->fetchAll();
}
}