我只是想在我的所有类上实现泛型方法(表示数据库中的数据)。
我找不到这不起作用的原因,有什么想法吗?(在 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 来定义。声明为公共的类成员可以在任何地方访问。声明为受保护的成员只能在类本身内访问,并且只能由继承类和父类访问。声明为私有的成员只能由定义成员的类访问。