【发布时间】:2019-09-13 21:58:42
【问题描述】:
我是 PHP OOP 的初学者。我想防止在子类启动时覆盖父类属性。比如我有Parent和Childclasses如下:
class Parent {
protected $array = [];
public function __construct() {
}
public function add($value) {
$this->array[] = $value;
}
public function get() {
return $this->array;
}
}
class Child extends Parent {
public function __construct() {
}
}
首先,我发起Parentclass向array属性添加了3项:
$parent = new Parent;
$parent->add('a');
$parent->add('b');
$parent->add('c');
然后,我启动了Child 类并在array 属性中添加了一项:
$child = new Child;
$child->add('d');
实际结果:
var_dump($parent->show()); // outputs array('a', 'b', 'c')
var_dump($child->show()); // outputs array('d')
预期结果:
var_dump($parent->show()); // outputs array('a', 'b', 'c', 'd')
var_dump($child->show()); // outputs array('a', 'b', 'c', 'd')
我该怎么做?我试过了,但没有用:
class Child extends Parent {
public function __construct() {
$this->array = parent::get();
}
}
【问题讨论】:
-
child != parent,只是因为它扩展,它仍然是两个独立的实例。
-
@treyBake,那么如何在启动时将一些属性传递给子类?
-
子扩展父,但如果你实例化父它与子没有联系
-
只实例化孩子而不是父母
-
如果你总是想将相同的属性集传递给子类,你可以在父类中将它们设置为默认值。
标签: php class oop inheritance php-7