通过__set()和__get()设置和获取私有字段
私有字段:只有类内可以访问
<?php
class Computer {
private $_name;
private $_model;
private $_cpu;
//当类外的对象直接调用私有字段时,会跟着去检查是否有拦截器,
//如果直接对$_name进行赋值,那么__set()方法就会拦截住,就不会报错了。
//采用拦截器进行赋值和取值
//赋值
private function __set($_key,$_value) {
//那么$_key = '_name',那么$_value = '联想';
//$this->_name = '联想'
//那么$_key = '_cpu',那么$_value = '四核'
//$this->_cpu = '四核'
//那么$_key = '_model',那么$_value = 'i7'
//$this->_model = 'i7'
$this->$_key = $_value;
}
//取值
private function __get($_key) {
return $this->$_key;
//如果$_key = '_name' 那么$this->_name;
//如果$_key = '_cpu' 那么$this->_cpu;
//如果$_key = '_model' 那么$this->_model;
}
}
$computer = new Computer();
$computer->_name = '联想';
$computer->_cpu = '四核';
$computer->_model = 'i7';
echo $computer->_name;
echo $computer->_cpu;
echo $computer->_model;
?>
//__set()和__get()方法私有了,还是可以执行,是因为
//因为目前程序的指针已经在类内了。而类内可以执行封装的方法
//类内执行私有方法,不会出现任何错误。
//它只需要间接的拦截就可以了。拦截是在内类执行的。
//说白了,__set()和__get()是PHP内置的方法,具有一定的特殊性