私は理解できないようなPHPの動作に悩まされています。属性参照が継承で機能しない
class A {
private $v;
public function __construct(&$v)
{
$this->v = &$v;
}
public function setV($v) {
$this->v = $v;
}
public function getV() {
return $this->v;
}
}
class B extends A {
public function setV($v) {
$this->v = $v;
}
}
$v = '1';
$c = new A($v); // <= this will be replaced
echo $c->getV() . "\n";
$v = '2';
echo $c->getV() . "\n";
$c->setV('3');
echo $c->getV() . "\n";
echo $v . "\n";
出力
1
2
3
3
しかし、私は$c = new B($v);
でオブジェクトの作成を交換するとき、それは私が以前と同じ出力を期待
1
2
2
2
を出力します。どうしてこれなの?私はPHP 5.3を使用しますが、これを修正しようとするためにおそらくアップデートします。
「プライベート」ではなく「保護」を使用してください。 – koen
ああ、もちろん!ヒント@koenありがとう。とにかく、これは私の意見では、エラーメッセージを発行する必要があります。 – str
ああ、実際には*エラーメッセージを出します。私は私の設定をねじ込んだ... – str