如果你不想使用 __get 方法获取到对象里的所有的属性的值,也就是,你只想让指定的属性可以使用 get 方法获取到。
我们可以再去设置一下 ... 先在类里面去定义一个私有的属性 ... 这个属性是一个数组,在这个数组里,可以包含你允许访问的属性 ... 这个数组可以叫它 white_list ... 数组里面的项目就是允许访问的属性的名称 ... 先设置一个 track_name ...
private $access = array('track_name')
为了演示一下,在上面,再去定义一个属性 ... 叫做 track_artist ..
private track_artist
然后在 __get 函数里面,返回属性值之前先去判断一下,这个属性是不是在 access 这个数组里,也就是我们允许访问的属性的这个数组。如果在里面,就返回属性的值 ... 如果不在的话,就返回一个 NULL ...
public function __get($name) {
if(in_array($name, $this->access)) {
return $this->$name;
} else {
return NULL;
}
}
在下面,再设置一下 magic 这个对象的 track_artist 属性的值 ..
$magic->track_artist = 'Coldplay';
下面,先试一下访问 track_name 这个属性 ... 回到浏览器 ... 会显示这个属性的值 ... 因为这个属性包含在 access 这个允许访问的属性的数组里面。
回过来,再试一下去访问 track_artist ... 回到浏览器 ...
没有任何的显示 ... 因为这个属性不在我们自己设置的允许访问的属性的数组里。