【问题标题】:Accessing an overloaded PHP property访问重载的 PHP 属性
【发布时间】:2017-10-12 14:41:43
【问题描述】:

我看到了一些关于访问父类属性的问题(如PHP Accessing Parent Class Variable),但我似乎在一个前卫的情况下挣扎(我实际上不需要那种模式,但是好奇心,你知道...☺):

如果子类覆盖了父类变量,但仍想访问它怎么办?

例子:

class A {
  protected $x = 'a';
}

class B extends A {
  protected $x = 'b';
  public function showX() {
    var_dump(array(
      'this->x' => $this->x,
      'parent->x' => '??',
  }
}

$b = new B();
$b->showX();

不依赖父级上的getX() 方法(并在B 类中使用parent::getX(),或者如果B 没有覆盖getX 方法,则仅使用$this->getX()),如何获得如下结果:

this->x: 'b'
parent->x: 'a'

正如http://php.net/manual/pl/keyword.parent.php#94177 所说,使用parent::$x 是行不通的,因为它会寻找不存在的静态属性$x。有什么工作方式吗?

【问题讨论】:

  • 一旦你覆盖了parent::$x ...它就会被覆盖。与稍后在脚本中以程序方式重新分配变量并没有什么不同 - 您无法取回原始值。
  • 您可以在父级中为x 添加一个getter,然后重新声明A 并使用该getter - repl.it/M6uV
  • 你想要做的就像给一个变量一个值,然后覆盖这个值,然后你想得到以前的值。

标签: php overloading


【解决方案1】:

你实际上要问的是:

如果我覆盖了一个值但仍想要旧值怎么办?

那么只有一个简单的解决方案。您创建另一个变量并将其存储在其中,然后再覆盖它。

【讨论】:

  • 我就是这么想的;但是知道一些 PHP 的东西和方法……值得思考!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多