父类变量

时间:2010-11-19 09:57:27

标签: php oop

这是我的基本示例:

class Foo {

    public $toy = "car";

    public function run() {
        $this->toy = "train";
        $bar = new Bar();
        $bar->run();
    }   
}

class Bar extends Foo {
    public function run() {
        echo $this->toy;
    }
}

$foo = new Foo();
$foo->run();

出于某种原因,它总是呼应汽车而不是火车。这是什么原因?

3 个答案:

答案 0 :(得分:2)

Foo运行会创建一个对象Bar,其toy已初始化为car。因此,结果是car,正如所料。

答案 1 :(得分:1)

因为您要在Bar内创建 Foo::run实例。您对Foo实例所做的更改不会对Bar实例产生任何影响。它们是两个不同的实例  您也可以这样看:每当您从子类实例化一个对象时,都会创建一个新的父类实例。

您可以创建属性static,然后它将在所有实例之间共享:

class Foo {

    public static $toy = "car";

    public function run() {
        self::$toy = "train";
        $bar = new Bar();
        $bar->run();
    }   
}

class Bar extends Foo {
    public function run() {
        echo self::$toy;
    }
}

答案 2 :(得分:0)

你所做的是“委托”:你创建一个新实例并调用它而不是parent方法。您正在寻找的是

parent::run();

这将调用parent方法。