【问题标题】:PHP use Parent variable in Extended Class [duplicate]PHP在扩展类中使用父变量[重复]
【发布时间】:2014-02-28 10:42:32
【问题描述】:

我无法理解这个概念。我想在扩展类中使用父类中的一个简单变量。这个变量很灵活,可以在父类的 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>";

【问题讨论】:

    标签: php class variables


    【解决方案1】:

    你必须像这样使用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
    

    【讨论】:

    • return $this-&gt;owner; 会在第 2 班工作吗? @ShlomoGoldstein
    【解决方案2】:

    $Class1 是不同的对象,$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】:

      记住类!=对象。 Class2 从 Class1 继承,但 class1 对象为变量设置了一个值,并且 class2 对象不继承自 class1 对象。但是您可以将 $owner 属性设置为静态来实现这一点。

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

      【讨论】:

        【解决方案4】:

        你有 2 个不同的对象。

        您可以像这样使用相同的对象:

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

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

        【讨论】:

          【解决方案5】:

          你的问题不清楚。不过我会努力的!

          当您扩展父类 (Class1) 时,publicprotected propertiesmethods 可以被 child 类使用或覆盖。

          所有者变量是可见的,可以被子类使用。但它在不同的namespace 因为这个声明:$Class2 = new Class2();

          调用echo var_dump($Class2-&gt;show_owner()); 显示NULL 数据类型。

          【讨论】:

            猜你喜欢
            • 2014-08-24
            • 1970-01-01
            • 2014-12-25
            • 2018-09-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-01-06
            • 2020-01-07
            相关资源
            最近更新 更多