我有两个类 - 带有变量$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();