如果父变量在子对象中被替换,如何从子对象访问父变量


How can be accessed to Parent variable from child Object if it was replaced in Child?

我有两个类 - 带有变量$number的父类"First",我有子类"Second",其中属性$number被更改。

如果在子对象

中被替换,如何从子对象访问父变量?

我们无法更改现在拥有的属性和方法。

class First {
  protected $number = "First";
  protected function getNumber() {
     return $this->number;
  }
}
class Second extends First {
  protected $number = "Second";
  protected $count = "One More";
}
$first = new First;
$second = new Second;
// must show "First"
echo $second->getNumber();

getNumber() 方法被声明为受保护,因此您的示例代码将导致致命错误。

引用 php 文档:

声明为受保护的成员只能在类中访问 本身以及继承的和父类。

友情链接 : http://php.net/manual/en/language.oop5.visibility.php

因此,您首先需要创建自己的扩展 Second 的自定义类,然后重写 getNumber 方法或创建另一个实例化父类以返回其$number值的方法。您的方法应声明为公共方法,以便能够从类外部访问它。请参阅以下示例:

class First {
  protected $number = "First";
  protected function getNumber() {
     return $this->number;
  }
}
class Second extends First {
  protected $number = "Second";
  protected $count = "One More";
}
class CustomClass extends Second {

  public function callSecondClassParentGetNumberMethod() {
    $parentClass=get_parent_class('Second');
    $parent=new $parentClass;
    //or if you know the parent class just call it directly:
    //$parent =new First;
     return $parent->getNumber();
  }
}

$customClass = new CustomClass;
// shows "First"
echo $customClass->callSecondClassParentGetNumberMethod();

非常感谢你,马特尔...你让我开心!

我只是对您的解决方案进行了一些小的更改,这很完美。

class First {
protected $number = "First";
protected function getNumber() {
    return $this->number;
}

}

类 第二 扩展 第一 {

protected $number = "Second";
public function getNumber() {
    $parent = new First;
    return $parent->getNumber();
}

}

$first = 新的优先;

$second = 新的第二;

显示"第一"echo $second->getNumber();