2016-09-26 2 views
-3

У меня есть несколько вопросов: так, у меня есть класс А следующим образом:Логика Вызов переменной класса из другого класса

class A { 
protected $ _blah = 'blah'; 

public __construct { 
$this-> setPath ('test'); 
new B; 
} 

public setPath ($ path) { 
$ This -> _ blah = $ path; 
} 
} 

У меня есть класс B следующим образом:

class B extends A { 
`echo $ this -> _ blah`; 
} 

Ны, почему выход: «л», а не «тест» в классе В. однако, я изменил переменный в классе а на «тест» до моего экземпляра класса B.

+0

Не ставьте пробел после '$'. Он работает, но это не общий стиль и делает ваш код сложнее для всех остальных читать. – Barmar

+0

Пространства вокруг '->' также не являются обычным стилем. – Barmar

+0

Есть ли причина, по которой у вас есть обратные ссылки вокруг утверждения 'echo'? – Barmar

ответ

0

из код вы по проблема связана с тем, что вы вызываете $This вместо $this.

Для справки, взгляните на то, как PHP обрабатывает object inheritance. Поскольку переменные чувствительны к регистру, вы фактически не изменяете свойство своего класса в опубликованном коде.

Лучше примером может быть следующее:

class A 
{ 
    public $property = 'foo'; 
} 

class B extends A 
{ 
    public function __construct() 
    { 
     $this->property = 'baz'; 
    } 
} 

// 'foo'; 
echo A::$property; 

$b = new B; 

// 'baz' 
echo $b->property;