public function __set( $property_name, $value )
这个方法用来为私有成员属性设置值的
有两个参数,第一个参数为你要为设置值的属性名,第二个参数是要给属性设置的值,没有返回值。
这个方法同样不用我们手工去调用,它也可以做成私有的,是在直接设置私有属性值的时候自动调用的,同样属性私有的已经被封装上了
如果没有__set()这个方法,是不允许的,比如:$this->name=‘zhangsan’,这样会报出致命错误,不能访问类中的私有属性,但是如果你在类里面加上了__set($property_name, $value)这个方法,在直接给私有属性赋值的时候,就会自动调用它,自动接收你所需要赋值的属性名和属性值,达到赋值的目的。
如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。为了不传入非法的值,还可以在这个方法给做一下判断。
public function __get( $property_name )
1. 这个方法用来获取私有成员属性值的
2. 当你在类的外部,访问该类中私有属性时,类会自动调用此方法,$property_name自动接收你所需要访问的私有属性名,此时自需要在方法内做出相应操作即可
<?php Class Account{ private $username; private $passwd = 1234; public function __construct() { // ToDo... } public function __set($name, $value) { echo "Setting $name to $value \r\n"; $this->$name = $value; } public function __get($name) { if (!isset($this->$name)) { echo "$name 未设置 \r\n"; $this->$name = '属性的默认值'; } else { return $this->$name; } } } $acc = new Account(); $acc->username = 'eason'; // 这里会自动调用__set方法,赋予此属性值 echo "<br>"; echo $acc->username; // 这里会自动调用__get方法,返回该属性值
运行结果:
Setting username to eason
eason