首頁 > 後端開發 > php教程 > 私有字段private也可以外部访问

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

WBOY
發布: 2016-06-23 13:31:21
原創
1047 人瀏覽過

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实现就可以。

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板