诺亚方舟

沉淀

PHP类中的四个魔术方法

这篇文章论述的是php的四个魔术方法:__get()、__set()、__isset()、__unset()。

之前很少研究php类里面为什么要有这些魔术方法,所以不了解,到最近才慢慢明白这些方法是用来增强程序的健壮性。OK,接下来记录下这几个方法的用途。首先建一个实验类:

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
<span style="font-size: large;">
class persion{
	function __construct(){
		$this-&gt;name = "xujs";
		$this-&gt;age = 20;
	}
	function __set($name,$value = false){
		$value = ($value)?$value:"not value";
		$this-&gt;$name = $value;
	}
	function __get($name){
		return $this-&gt;name;
	}
	function __isset($name){
		if(isset($this-&gt;$name)){
			return 1;
		}else{
			return 0;
		}
	}
	function __unset($name){
		unset($this-&gt;$name);
	}
	private $name;
	private $age;
 
}
$me = new persion;
</span>

 

1、__get($name)

触发情况:当实例访问一个类的非public属性时触发

如echo $me->name;

2、__set($name,$value)

触发情况:当实例访问一个类的非public属性或不存在属性时触发

如$me->grade = 2010;

3、__isset($name)

触发情况:使用isset()函数判断一个类属性时触发

如isset($me->grade);

4、__unset($name)

触发情况:使用unset()函数注销一个类的某一个属性时触发

如unset($me->name);

注意:魔术方法如果一旦定义后,每次实例化后是会自动调用的,无需再手动调用,另外,每个魔术方法的参数都应该是固定的,即是对应不变的,可变的是程序的内容,默认触发后会有怎样的效果就取决于你的程序怎么写。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>