我只想在我的所有类上实现泛型方法(代表数据库中的数据)。
我无法找到为什么这不起作用的理由,任何想法? (在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中抛出
我只是无法理解为什么从父类扩展的方法不能迭代子类的私有成员,所以它抛出了我的异常。
答案 0 :(得分:0)
在那里问了一个类似的问题:Base class not permitted to access private member?
来自php.net:
可以通过在声明前加上关键字public,protected或private来定义属性或方法的可见性。声明为public的类成员可以随处访问。声明受保护的成员只能在类本身以及继承和父类中访问。 声明为私有的成员只能由定义该成员的类访问。