属性引用不能用于继承


Attribute reference does not work with inheritence

我被一种我似乎无法理解的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,但可能更新尝试修复这个

当一个类继承另一个父类时,它只能使用父类中的公共和受保护的变量和函数。因此这将打印相同的结果;

<?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) {
        parent::setV($v);
    }
}
$v = '1';
$c = new B($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";
?>

您使用$c = new B($v),但类B没有构造函数,那么为什么您传递参数$v。使用父类的构造函数并尝试:

class B extends A{
   public function __construct($v)
    {
       parent::_construct($v)
    }
}