2016-09-26 51 views
-3

我有几个问题: 所以,我有一个A类,如下所示:逻辑从另一个类中调用一类的变量的

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类 然而,我的B类

+0

不要把空间$后''。它可以工作,但它不是常见的风格,让你的代码更难以让其他人阅读。 – Barmar

+0

' - >'周围的空间也不是常见的风格。 – Barmar

+0

为什么你在'echo'声明中引起反感是否有原因? – Barmar

回答

0

的情况下从之前我已经改变了变量A类为“测试”代码你宝sted,问题可能是因为您打电话给$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;