-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 に答える