-1

我有一个属性,用于定义在类上使用的一组字段。

最终,当类扩展时,PHP 允许您重新定义此属性,但我不想允许这样做,因为父级上可用的字段可能会在重载时丢失。

这是一个例子:

class A {
    protected $_fields = array('a', 'b');
}

class B extends A {
    protected $_fields = array('c', 'd'); // I'm loosing 'a' and 'b' fields
}

如果物业超载,我可以在施工时检查吗?也许通过使用反射方法?

4

1 回答 1

1

如果您不想让扩展类重新定义属性,请将属性定义为私有。私有属性只能在定义类内部访问,并且在扩展父类的类中对属性的任何重新定义都不会更改父类访问的值。

class A {
    private $_fields = array('a', 'b');

    function foo() { var_dump($this->_fields); }
}

class B extends A {
    protected $_fields = array('c', 'd'); // I'm loosing 'a' and 'b' fields

    function foo2() { var_dump($this->_fields); }
}

$b = new B();
$b->foo();
$b->foo2();

将输出:

array(2) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
}
array(2) {
  [0]=>
  string(1) "c"
  [1]=>
  string(1) "d"
}

.. 由于第一次访问将读取父类中的属性(在继承值的类中不能被覆盖),并且扩展器仍然能够获取任何本地属性的值,无论在父类。

于 2012-07-13T08:45:09.013 回答