0

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

我找不到为什么这不起作用的原因,有什么想法吗?(在 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:12 中未捕获的异常 'Exception' 和消息 '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 中抛出

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

4

1 回答 1

0

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

来自php.net

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

于 2013-11-06T10:11:16.427 回答