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…

你可能感兴趣的:(PHP)