刚开始学习魔术方法时对__get()、__set() 和__call()的用法和作用不是太了解,也有一些误解。。。
现在分享一下个人的理解,大家共勉一下:
__get()、__set() 和__call()是很常用的,虽然不像__construct、__destruct运用的那么多,但是它们地位也是毋庸置疑的,
__construct、__destruct大家肯定非常熟悉了,在这就不多说了,直接看—————__get()、__set() 和__call();
1. __call :
规则:
mixed __call(string $name,array $arguments)
当调用类中不存在的方法时,就会调用__call();
为了更好的理解,看一下例子:
<?php class Test{ public function __call($method,$args){ echo $method; var_dump($args); } } $ob=new Test(); $ob->hello(1,2); ?>
上面的例子将输出:
hello
Array(
[0]=>1
[1]=>2
)
2.__get() 和__set():
规则:
get : mixed __get(string $name) set: void __set(string $name ,mixed $value)
__get()是访问不存在的成员变量时调用的;
__set()是设置不存在的成员变量时调用的;
为了更好的理解,看一下例子:
<?php class Test{ public $c=0; public $arr=array(); public function __set($x,$y){ echo $x . "/n"; echo $y . "/n"; $this->arr[$x]=$y; } public function __get($x){ echo "The value of $x is".$this->arr[$x]; } } $a = new Test; $a->b = 1 ;//成员变量b不存在,所以会调用__set $a->c = 2;//成员变量c存在,所以无任何输出 $d=$a->b;// 成员变量b不存在,所以会调用__get ?>
上面的例子将输出:
b
1
The value of b is 1
希望可以帮到大家!