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…