class nowamagic {
private $domain;
function __get($key){
return "使用get访问属性".$this->$key;
}
function __set($key,$value){
$this->$key = $value;
echo("使用set设置属性$key, 赋值为:$value");
}
}
$ins = new nowamagic();
$ins->domain = "nowamagic.net";
echo '
';
echo $ins->domain;
?>
运行后得到,
使用set设置属性domain, 赋值为:nowamagic.net
使用get访问属性nowamagic.net
请问,如何合理设置使得,私有字段private不可以外部访问?
你的访问是通过公有的方法 __set、__get 进行的
你把他们去掉,看看还能访问私有的 domain 吗
你是通过__get 方法访问的。
__get是公用方法,所以可以被外部调用。
而类中方法调用私有变量是有权限的,所以__get方法调用private是可以。
如果你想不能访问,可以屏蔽__get和__set方法实现。
或者在__get,__set方法限制。
class nowamagic {private $domain; function __get($key){ if($key!='domain'){ return "使用get访问属性".$this->$key; } } function __set($key,$value){ if($key!='domain'){ $this->$key = $value; echo("使用set设置属性$key, 赋值为:<font color=red>$value</font>"); } }}$ins = new nowamagic();$ins->domain = "nowamagic.net";echo '<br />';echo $ins->domain;
类里面的私有属性,不通过set get实现就可以。