魔术方法归纳之 __set 与 __get

public function __set( $property_name, $value )

  1. 这个方法用来为私有成员属性设置值的

  2. 有两个参数,第一个参数为你要为设置值的属性名,第二个参数是要给属性设置的值,没有返回值。

  3. 这个方法同样不用我们手工去调用,它也可以做成私有的,是在直接设置私有属性值的时候自动调用的,同样属性私有的已经被封装上了

  4. 如果没有__set()这个方法,是不允许的,比如:$this->name=‘zhangsan’,这样会报出致命错误,不能访问类中的私有属性,但是如果你在类里面加上了__set($property_name, $value)这个方法,在直接给私有属性赋值的时候,就会自动调用它,自动接收你所需要赋值的属性名和属性值,达到赋值的目的。

  5. 如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。为了不传入非法的值,还可以在这个方法给做一下判断。


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

暂无评论

发布评论