PHP在扩展类中使用Parent变量

时间:2014-02-28 10:42:32

标签: php class variables

我无法控制这个概念。我想在扩展类中使用我父类中的一个简单变量。这个变量很灵活,可以在父类中的Method中的某处计算。

class Class1 {
    public $owner;

    function set_owner () {
        $this->owner = "Me";
        return $this->owner;
    }
}

class Class2 extends Class1 {

    function show_owner () {
        return $this->owner;
    }
}

$Class1 = new Class1();
$Class2 = new Class2();

echo "<p>owner set: ".$Class1->set_owner()."</p>";
echo "<p>owner get: ".$Class2->show_owner()."</p>";

5 个答案:

答案 0 :(得分:2)

您必须使用static,如此:

class Class1 {
    public static $owner;

    function set_owner () {
        self::$owner = "Me";
        return self::$owner;
    }
}

class Class2 extends Class1 {

    function show_owner () {
        return self::$owner;
    }
}

$Class1 = new Class1();
$Class2 = new Class2();

echo "<p>owner set: ".$Class1->set_owner()."</p>";
echo "<p>owner get: ".$Class2->show_owner()."</p>";

输出:

owner set: Me

owner get: Me

答案 1 :(得分:1)

你有两个不同的对象。

您可以使用相同的对象:

$Class2 = new Class2();

echo "<p>owner set: ".$Class2->set_owner()."</p>";
echo "<p>owner get: ".$Class2->show_owner()."</p>";

或者如果你想拥有2个对象,你也可以使用静态属性(但这是不好的做法,很难测试)。

答案 2 :(得分:1)

$Class1是一个不同的对象&amp; $Class2是不同的对象,因此$owner变量对于它们都是不同的

你在做什么

        echo "<p>owner set: ".$Class1->set_owner()."</p>";  //set the owner variable of Class1
        echo "<p>owner get: ".$Class2->show_owner()."</p>"; // get the owner variable of Class2  , $owner is different for Class2

这将打印您想要的内容

        echo "<p>owner set: ".$Class2->set_owner()."</p>";  //set the owner variable of Class2
        echo "<p>owner get: ".$Class2->show_owner()."</p>"; // get the owner variable of Class2

答案 3 :(得分:1)

记住Class!= object。 Class2继承了Class1的形式,但class1对象为变量设置了一个值,而class2对象并没有从class1对象继承。但您可以将$ owner属性设置为static以实现此目的。

演示:https://eval.in/106931

答案 4 :(得分:0)

你的问题不明确。我会尽力而为!

当您扩展父类(Class1)时,publicprotected propertiesmethods可由{{1}使用或覆盖} class。

owner变量是可见的,可以由子类使用。但由于此声明,它位于不同的childnamespace;

调用$Class2 = new Class2()会显示echo var_dump($Class2->show_owner());数据类型。

相关问题