PHP父函数无法查看子类成员

时间:2011-09-13 14:34:54

标签: php oop

我希望我的抽象父类有一个子类继承的方法,该子类允许该子类遍历所有变量(从父项继承的变量,以及它自己的变量)。 / 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()函数可以被许多子类使用,所以我不想在每个子类中实现它,只在父类中实现它,但看起来我将不得不除非它可以访问该类的成员。

有没有办法实现这个目标?

提前致谢。

3 个答案:

答案 0 :(得分:4)

如果您希望代码按照描述运行,则需要使用protected。记住访问/可见性修饰符的作用:

  • private - 仅限班级访问
  • protected - 完整的继承链访问
  • public - 通用访问

答案 1 :(得分:3)

尝试将“私人”定义更改为“受保护”定义。

PHP Visibility

  

可见性

     

可以通过为前缀添加前缀来定义属性或方法的可见性   声明与关键字public,protected或private。类   公开的成员可以随处访问。成员宣布   protected只能在类本身内部访问   继承和父类。被宣布为私人的成员可能只是   由定义成员的类访问。

答案 2 :(得分:2)

这似乎是一个可见性问题。

在您的子课程中,将private更改为protected可让家长访问该子级的属性。

有关详细信息,请参阅:http://us2.php.net/manual/en/language.oop5.visibility.php