我希望我的抽象父类有一个子类继承的方法,该子类允许该子类遍历所有变量(从父项继承的变量,以及它自己的变量)。 / p>
目前,如果我在父级中实现此方法,那么只会迭代父级的变量:
class MyObject {
private $one;
private $two;
private $three;
function assignToMembers() {
$xx = 1;
foreach($this as $key => $value) {
echo "key: ".$key."<br />";
$this->$key = $xx;
$xx++;
}
}
public function getOne() {
return $this->one;
}
public function getTwo() {
return $this->two;
}
public function getThree() {
return $this->three;
}
}
class MyObjectSubclass extends MyObject {
private $four;
private $five;
public function getFour() {
return $this->four;
}
public function getFive() {
return $this->five;
}
}
$o = new MyObjectSubclass();
$o->assignToMembers();
echo $o->getOne()." ";
echo $o->getTwo()." ";
echo $o->getThree()." ";
echo $o->getFour()." ";
echo $o->getFive()." ";
// This prints 1 2 3
另一方面,如果我将assignToMembers
函数放在子类中,那么只迭代子类的成员。
因为我希望我的assignToMembers()
函数可以被许多子类使用,所以我不想在每个子类中实现它,只在父类中实现它,但看起来我将不得不除非它可以访问该类的成员。
有没有办法实现这个目标?
提前致谢。
答案 0 :(得分:4)
如果您希望代码按照描述运行,则需要使用protected
。记住访问/可见性修饰符的作用:
private
- 仅限班级访问protected
- 完整的继承链访问public
- 通用访问答案 1 :(得分:3)
尝试将“私人”定义更改为“受保护”定义。
可见性
可以通过为前缀添加前缀来定义属性或方法的可见性 声明与关键字public,protected或private。类 公开的成员可以随处访问。成员宣布 protected只能在类本身内部访问 继承和父类。被宣布为私人的成员可能只是 由定义成员的类访问。
答案 2 :(得分:2)
这似乎是一个可见性问题。
在您的子课程中,将private
更改为protected
可让家长访问该子级的属性。
有关详细信息,请参阅:http://us2.php.net/manual/en/language.oop5.visibility.php