我正在尝试使用OOP来处理OOP,而且我对一些类继承的东西感到有些困惑。
这里有几个简单的类我正在尝试学习它们的工作方式。我想简单地在子类中调用(父)类中的变量。从我看过的例子来看,它似乎应该可行,但是子类无法设置父变量:
class test {
private $myvar;
private $temp;
function __construct(){
$this->myvar = 'yo!';
$temp = new test2();
$temp->tester();
echo $this->myvar;
}
public function setVar($in){
$this->myvar = $in;
}
}
class test2 extends test{
function __construct(){
}
public function tester(){
parent::setVar('yoyo!');
}
}
$inst = new test(); // expecting 'yoyo!' but returning 'yo!'
感谢您的帮助。
答案 0 :(得分:6)
看起来你对继承和OOP非常困惑。这根本不是它的工作方式。
我想简单地在子类中设置调用(父)类中的变量。
由于以下几个原因,这是不可能的。
首先,当您使用new
时,它会创建该类的新实例。每个实例彼此独立,因为它们的属性不会捆绑在一起。
当你有一个子类时,继承了父类的属性和方法。但是当你创建它的一个实例时,它是子类的一个实例 - 而不是父类。我不是你想要在那里完成的。
parent::setVar('yoyo!');
继承的好处是你默认获得父方法,除非你在子类中覆盖它们。由于您没有这样做,因此无需使用parent::setVar()
,只需执行$this->setvar()
。
答案 1 :(得分:5)
好吧,
$temp = new test2();
您正在创建该类的新实例。他们不再相关了。
继承仅影响类层次结构的单个实例。