繁体   English   中英

如何防止覆盖 PHP 类中的父属性?

[英]How to prevent overriding of parent properties in a PHP class?

我是 PHP OOP 的初学者。 我想防止在启动子类时覆盖父类属性。 例如,我有如下ParentChild类:

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类向array属性添加了 3 个项目:

$parent = new Parent;
$parent->add('a');
$parent->add('b');
$parent->add('c');

然后,我启动了Child类并向array属性添加了 1 个项目:

$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 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')

似乎在这里扩展一个类不是你想要做的。

您应该阅读类和对象之间的区别。 也许你应该先做一个通用的 OOP 教程。

如果您希望在类的实例之间共享静态变量,则需要使用静态变量。

你应该这样做。

$child = clone $parent; 
$child->add('d');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM