PHP 类 使用私有可见性时成员上的继承和迭代


PHP class Heritage and Iteration on members when using private visibility

我只是想在我的所有类上实现泛型方法(表示数据库中的数据)。

我找不到这不起作用的原因,有什么想法吗?(在 PHP 5.3.1 上)

   class ActiveRecord {
          public function getAttr($attr_name) {
                 foreach( $this as $key => $value) {
                 if( $key == $attr_name )
                        return $value;
                 }
                 throw new Exception( __CLASS__ . " : Attribut introuvable");
          }
    }
   class MyClass extends ActiveRecord { 
        public $toto = "Variable public<br>";
        protected $tutu = "variable protected<br>";
        private $titi = "variable private<br>";
    }
   $class = new MyClass();
   foreach( $class as $key => $value)
          echo $key . " : " . $value . "<br>";
   echo $class->getAttr("toto");
   echo $class->getAttr("tutu");
   echo $class->getAttr("titi");

它给了我这样的东西:

多 : 可变公共

可变公共
变量受保护

致命错误:未捕获的异常"异常",在 C:''wamp''www''restau-app''lib''activerecord.php:12 中抛出消息"ActiveRecord : Attribut introuvable" 堆栈跟踪:#0 C:''wamp''www''restau-app''index.php(24): ActiveRecord->getAttr('titi') #1 {main} 在第 12 行抛出 C:''wamp''www''restau-app''lib''activerecord.php

我只是不明白为什么从父类扩展的方法不能迭代子类的私有成员,所以它抛出了我的异常。

那里提出了类似的问题:不允许基类访问私有成员?

从 php.net :

属性或方法的可见性可以通过在声明前面加上关键字 public、protected 或 private 来定义。声明为公共的类成员可以在任何地方访问。声明为受保护的成员只能在类本身内访问,并且只能由继承类和父类访问。声明为私有的成员只能由定义成员的类访问。