我注意到一些奇怪的东西,我希望你能解释为什么会发生这种情况。在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”而不是父值
为什么需要使用子测试值而不是父级?
答案 0 :(得分:0)
让我们回到这里几步。您似乎对此处的abstract
关键字感到困惑。抽象类不能是对象。它不代表可以实例化的东西。
为什么需要使用子测试值而不是父级?
在这种情况下,这是因为父对象从不是开始的对象的实例。作为一个抽象类,它必须扩展为任何用途。
当您使用new
实例化子类时,子protected $test
优先于父测试属性,这是预期的oop行为。
来自你的评论:
因此,如果我实例化chiled类,那么父类将使用子属性而不是自己的属性,如上例所示
它不是“子属性”与“父属性”,它们是相同的属性。没有父测试属性和子测试属性,在实例化时,扩展类会覆盖自己的测试属性(与父类相同)。
理解扩展意味着基本上将功能性添加到类中,而不是创建新类。出于所有意图和目的,您应该认为父母和孩子是相同的,只有在这里。