PHP类使用私有可见性时对成员进行遗产和迭代

时间:2013-11-06 09:54:31

标签: php activerecord iterator visibility php-5.3

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

我无法找到为什么这不起作用的理由,任何想法? (在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");

它给了我这样的东西:

  

toto:变量公开

     

变量公众
  变量保护

     

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

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

1 个答案:

答案 0 :(得分:0)

在那里问了一个类似的问题:Base class not permitted to access private member?

来自php.net

  

可以通过在声明前加上关键字public,protected或private来定义属性或方法的可见性。声明为public的类成员可以随处访问。声明受保护的成员只能在类本身以及继承和父类中访问。 声明为私有的成员只能由定义该成员的类访问。