如何防止覆盖 PHP class 中的父属性?
How to prevent overriding of parent properties in a PHP class?
我是 PHP OOP 的初学者。我想防止在子 class 启动时覆盖父 class 属性。例如,我有 Parent
和 Child
class 如下:
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() {
}
}
首先,我发起 Parent
class 添加了 3 项到 array
属性:
$parent = new Parent;
$parent->add('a');
$parent->add('b');
$parent->add('c');
然后,我发起了 Child
class 并添加了 1 项到 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();
}
}
看来扩展一个 class 不是你想做的。
您应该了解 类 和对象之间的区别。也许你应该先做一个通用的 OOP 教程。
如果您希望在 classes 的实例之间共享它们,则需要使用静态变量。
你应该这样做。
$child = clone $parent;
$child->add('d');
我是用静态变量做的。我的类现在是这样的:
class Parent {
protected static $array = [];
public function __construct() {
}
public function add($value) {
self::$array[] = $value;
}
public function get() {
return self::$array;
}
}
class Child extends Parent {
public function __construct() {
}
}
当我测试它时,我得到了我所期望的:
$parent = new Parent;
$parent->add('a');
$parent->add('b');
$parent->add('c');
$child = new Child;
$child->add('d');
var_dump($parent->show()); // outputs array('a', 'b', 'c', 'd')
var_dump($child->show()); // outputs array('a', 'b', 'c', 'd')
我是 PHP OOP 的初学者。我想防止在子 class 启动时覆盖父 class 属性。例如,我有 Parent
和 Child
class 如下:
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() {
}
}
首先,我发起 Parent
class 添加了 3 项到 array
属性:
$parent = new Parent;
$parent->add('a');
$parent->add('b');
$parent->add('c');
然后,我发起了 Child
class 并添加了 1 项到 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();
}
}
看来扩展一个 class 不是你想做的。
您应该了解 类 和对象之间的区别。也许你应该先做一个通用的 OOP 教程。
如果您希望在 classes 的实例之间共享它们,则需要使用静态变量。
你应该这样做。
$child = clone $parent;
$child->add('d');
我是用静态变量做的。我的类现在是这样的:
class Parent {
protected static $array = [];
public function __construct() {
}
public function add($value) {
self::$array[] = $value;
}
public function get() {
return self::$array;
}
}
class Child extends Parent {
public function __construct() {
}
}
当我测试它时,我得到了我所期望的:
$parent = new Parent;
$parent->add('a');
$parent->add('b');
$parent->add('c');
$child = new Child;
$child->add('d');
var_dump($parent->show()); // outputs array('a', 'b', 'c', 'd')
var_dump($child->show()); // outputs array('a', 'b', 'c', 'd')