php魔术方法get和set举例

php魔术方法get和set举例

 

一般来说,总是把类的属性定义为private,这更符合现实的逻辑。但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数魔术方法:“__get()”和“__set()”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
class Person {
	//下面是人的成员属性, 都是封装的私有成员
	private $name; //人的名子
	private $sex; //人的性别
	private $age; //人的年龄
	//__get()方法用来获取私有属性
	public function __get($name) {
		echo "在直接获取私有属性值的时候,自动调用了这个__get()方法<br>";
		if (isset ($this-> $name)) {
			return ($this-> $name);
		} else {
			return (NULL);
		}
	}
	//__set()方法用来设置私有属性
	public function __set($name, $value) {
		echo "在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值<br>";
		$this-> $name= $value;
	}
}
$p1 = new Person();
//直接为私有属性赋值的操作,会自动调用__set()方法进行赋值
$p1->name = "张三";
$p1->sex = "男";
$p1->age = 20;
//直接获取私有属性的值, 会自动调用__get()方法,返回成员属性的值
echo "姓名:" . $p1->name . "<br>";
echo "性别:" . $p1->sex . "<br>";
echo "年龄:" . $p1->age . "<br>";
?>

运行结果:

1
2
3
4
5
6
7
8
9
在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值
在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值
在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值
在直接获取私有属性值的时候,自动调用了这个__get()方法
姓名:张三
在直接获取私有属性值的时候,自动调用了这个__get()方法
性别:男
在直接获取私有属性值的时候,自动调用了这个__get()方法
年龄:20

注意:魔术方法get和set要定义public访问,否则可能出错: Warning: The magic method __get() must have public visibility and cannot be static in…

原文地址:https://www.cnblogs.com/fx2008/p/2974996.html