Rumah > pembangunan bahagian belakang > tutorial php > 私有字段private也可以外部访问

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2016-06-23 13:31:21
asal
1083 orang telah melayarinya

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;
Salin selepas log masuk

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

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan