你好stackOverflow系列:),
我有一个问题,我在其他地方找到了答案。我试着解释一下我的问题: 我有一个类,如果我从它创建一个其他类,从该子类我无法访问父类的属性。 我做错事情了? 我试图将我的类变量复制到本地并尝试返回本地变量,但是不能使用以下3种方式。
这是我的例子。 首先,我简单地创建一个对象:
$test = new test();
我的两节课如下:
class test {
public $testvar;
public function __construct() {
$this->testvar = 1234568;
echo ":) ".$this->testvar();
$test2 = new test2();
}
public function testvar() {
echo "testvar() called > ";
return $this->testvar;
}
}
并且测试2:
class test2 extends test {
public function __construct() {
echo "<br>:| this-> ".$this->testvar;
echo "<br>:| parent:: ". parent::testvar();
echo "<br>:| "; $this->testvar();
}
}
愿有人有个主意吗? THX
答案 0 :(得分:6)
你误解了继承概念。在test2
的构造函数中实例化test
不是继承。
未调用test
的构造函数,因此未设置testvar
。从$test2 = new test2();
的构造函数中删除test
。尝试:
class test {
public $testvar;
public function __construct() {
$this->testvar = 1234568;
echo ":) ".$this->testvar();
}
public function testvar() {
echo "testvar() called > ";
return $this->testvar;
}
}
class test2 extends test {
public function __construct() {
parent::__construct();
echo "<br>:| this-> ".$this->testvar;
echo "<br>:| "; $this->testvar();
}
}
$test2 = new test2();
另请参阅PHP manual on constructors(以及classes)。
答案 1 :(得分:0)
我想,如果你在test的构造函数中实例化test2,那并不意味着,测试2在你创建的上下文中实例化,这意味着:你设置的变量不可用于test2 :) ......我绝对不应该成为techear :-D
test2应该看起来像:
class test2 extends test {
public function __construct() {
parent::__construct();
echo "<br>:| this-> ".$this->testvar;
echo "<br>:| parent:: ". parent::testvar();
echo "<br>:| "; $this->testvar();
}
}
和test-constructor:
public function __construct() {
$this->testvar = 1234568;
echo ":) ".$this->testvar();
}
然后在这些类之外调用新的test2()!