abstract class从子类中获取属性值

时间:2018-05-31 17:38:13

标签: php oop

我注意到一些奇怪的东西,我希望你能解释为什么会发生这种情况。在php中它叫什么

无论如何,假设我有2个班级

abstract class parent {

    protected $test = ['parent'];
    public function __construct()
    {
        die(var_dump($this->test));
    }

}

class chile extends  parent{
    protected $test = ['child'];
}

如你所见,我正在尝试在父类中打印测试值,但我得到了孩子的价值 不是父母?

  

模具(的var_dump($这 - >试验));返回“child”而不是父值

为什么需要使用子测试值而不是父级?

1 个答案:

答案 0 :(得分:0)

让我们回到这里几步。您似乎对此处的abstract关键字感到困惑。抽象类不能是对象。它不代表可以实例化的东西。

  

为什么需要使用子测试值而不是父级?

在这种情况下,这是因为父对象从不是开始的对象的实例。作为一个抽象类,它必须扩展为任何用途。

当您使用new实例化子类时,子protected $test优先于父测试属性,这是预期的oop行为。

来自你的评论:

  

因此,如果我实例化chiled类,那么父类将使用子属性而不是自己的属性,如上例所示

它不是“子属性”与“父属性”,它们是相同的属性。没有父测试属性和子测试属性,在实例化时,扩展类会覆盖自己的测试属性(与父类相同)。

理解扩展意味着基本上将功能性添加到类中,而不是创建新类。出于所有意图和目的,您应该认为父母和孩子是相同的,只有在这里。