我有两个类 - 使用变量$ number的Parent“First”,我在其中更改了属性$ number的Child类“Second”。
如果在Child中替换了子对象,如何从子对象访问父变量?
我们无法改变现在的属性和方法。
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();
答案 0 :(得分:0)
getNumber()方法声明为protected,因此您的示例代码将导致致命错误。
引用php文档:
声明受保护的成员只能在类中访问 本身以及继承和父类。
链接:http://php.net/manual/en/language.oop5.visibility.php
因此,您首先需要创建自己的自定义类,扩展Second,并覆盖getNumber方法或创建另一个实例化父类的方法,以便返回其$ number值。您的方法应声明为public能够从课堂外访问它。见下面的例子:
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();
答案 1 :(得分:0)
谢谢, matwr 这么多......你今天过得好!
我只是对您的解决方案做了一些小改动,这很有效。
class First {
protected $number = "First";
protected function getNumber() {
return $this->number;
}
}
类Second扩展First {
protected $number = "Second";
public function getNumber() {
$parent = new First;
return $parent->getNumber();
}
}
$ first = new First;
$ second = new Second;
//显示“First” echo $ second-> getNumber();