$key; }">
当前位置:Gxlcms > PHP教程 > 私有字段private也可以外部访问

私有字段private也可以外部访问

时间:2021-07-01 10:21:17 帮助过:9人阅读

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, 赋值为:$value");    	}    }}$ins = new nowamagic();$ins->domain = "nowamagic.net";echo '
';echo $ins->domain;

类里面的私有属性,不通过set get实现就可以。

人气教程排行