
php面向对象编程中__get,__set 与数据的封装
许多资料上说,一个类中的私有属性不能从类的外部访问,但如果类定义时定义了__get和__set方法,就可以像访问公共属性那样访问私有属性,这两个方法会自动被调用,由于这两...
许多资料上说,一个类中的私有属性不能从类的外部访问,但如果类定义时定义了__get和__set方法,就可以像访问公共属性那样访问私有属性,这两个方法会自动被调用,由于这两个方法通过属性名来读写私有属性,那么我的疑问是,这样一来是不是所有的私有属性都"暴露"出来了?因为我只要把私有属性的名字传递过来就可以了,但实际应用中很有可能我一部分私有属性可以通过外部读写,但还有一部分我是只让外部读取但不能修改的,甚至有的私有属性在类的外部即不能读取也不能修改的(如只缓存当前类实例的操作状态等,这些应该对外部完全透明吧?),这种情况如何是好呢?
展开
2个回答
2015-08-22
展开全部
在 __get 方法里面判断,如果是不能读取的就立刻报错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2016-06-27
展开全部
function __get( $name ) {
$Key = array('a', 'b', 'c', 'd');
if ( !in_array( $name, $Key ) ) {
echo '该属性不允许读取';
} else {
return $this -> $name;
}
}
思路参考!
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询