为什么这段代码没有改变

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (22)

在下面的代码中,我希望real_changechange方法来更改变量。$n在构造函数中通过引用传递。

abstract class y {
  private $x;

  function __construct(&$x) {
    $this->x = &$x;
  }

  function real_change() {
    $this->x = 'real change';
  }
}

class x extends y {    
  function change() {
    $this->x = 'changed';
  }
}

$n = 'intact';
$c = new x($n);
$c->change(); 
echo $n.PHP_EOL; // prints "intact"
$c->real_change();
echo $n.PHP_EOL; // prints "real change"

为什么会发生这种事?

如何在修改属性中引用的变量的抽象类中创建方法?

提问于
用户回答回答于

在你的抽象课上,$x标记为私有,因此扩展类不可用。$this->x基本上只会创造一个新的公众$x可变的class x

如果将变量设置为protected它将提供对所有扩展类的访问,并允许你正确地设置它。

所属标签

可能回答问题的人

  • 嗨喽你好

    7 粉丝480 提问9 回答
  • 富有想象力的人

    3 粉丝0 提问7 回答
  • uncle_light

    5 粉丝518 提问6 回答
  • 人生的旅途

    10 粉丝484 提问6 回答

扫码关注云+社区

领取腾讯云代金券