2015-08-26 2 views
2

Единственного, что я пытаюсь добиться, чтобы иметь возможность получить доступ к Sql свойства в классе из класса B, но мое понимание должно быть полностью от сетки.не удается получить доступ к собственности от родительского класса

Я пробовал:

class A { 
    public $Sql; /*object*/ 

    public function __construct() { 
     $this->Sql = new MySQLi("localhost", "user", "password", "database"); 
    } 
} 

class B extends A { 

    public function __construct() { 
     $this->foo(); 
    } 

    public function foo() { 
     var_dump($this->Sql); // NULL 
     var_dump(parent::Sql); // Error due to Sql not being a constant, can't set an object as a constant. 
    } 

} 

$A = new A(); 
$B = new B(); 

Но код не ведет себя, как я надеюсь, что он делает.

Надеясь, что кто-то может указать мне в правильном направлении, где я ошибаюсь.

ответ

4
$A = new A(); 
$B = new B(); 

Эти две строки выше создают 2 разных объекта, которые не имеют никакого отношения друг к другу.

Так как у вас также есть конструктор класса B родительский constructor doesn't get called implicit, значит, вам нужно изменить свой код и вызвать конструктор из класса A в классе B, например.

public function __construct() { 
    parent::__construct(); 
    $this->foo(); 
} 
+1

Это чувство ясности просто коснулось меня, спасибо - ответ будет приниматься через 7 минут, когда это позволит мне. – zanderwar

+1

@ Zanderwar Добро пожаловать. Наслаждайтесь своим днем ​​:) (Кстати: я могу только настоятельно рекомендовать вам взглянуть на связанную страницу руководства.) – Rizier123