使用魔术方法
描述:读取不可访问属性的值时,__get()会被调用。 语法:public mixed__get(string name)
例子代码:
<?php class Student { //私有的成员属性 private $name="张三"; private $age=21; //当访问不可访问属性值时,__get()魔术方法会自动调用 public function __get($n) { return $this->$n; } } //创建学生类对象 $obj=new Student(); //访问私有属性 echo "{$obj->name}的年龄是{$obj->age}岁。";描述:再给不可访问属性赋值时,__set()会被调用。 语法:public void__set(string $name,mixed $value)
例子代码:
//当给不可访问属性赋值时,__set()方法会自动调用 public function __set($n,$v) { $this->$n=$v; } //修改私有属性 $obj->name="李四"; $obj->age=20;描述:在给不可访问属性调用isset()或empty()时,__isset()会被调用。 语法:public bool __isset(string $name)
例子代码:
//当对不可访问属性应用isset()或empty()时。__isset()会自动调用 public function __isset($n) { return isset($this->$n); } //判断私有属性是否存在 if(isset($obj->name)) { echo "存在"; }else { echo "不存在或不可访问"; }描述:当对不可访问属性调用unset时,__unset()会自动调用。 语法:public void__unset(string $name)
例子代码:
//当对私有属性调用unset时,__unset()会自动调用 public function __unset($n) { unset($this->$n); } //删除对象属性 unset($obj->name);使用魔术方法
描述:在对象调用一个不可访问方法时,__call()会被调用。 语法:public mixed__call(string $name,array $arguments)
代码例子:
//当访问一个不存在或不可访问方法时,__call()会被调用 //参数:$func是传递过来的方法名称,$args是传递过来的参数数组 public function __call($func,$args) { echo "方法{$func}(".implode(',', $args).")不存在或不可访问!"; } //调用一个不存在的方法 $obj->showInfo("张三",21);描述:用静态方法调用一个不可访问方法时,__callStatic()会被调用。 语法:public static mixed __callStatic (string $name,array $arguments)
代码例子:
//用静态方法调用一个不存在或不可访问方法时,__callStatic()会被调用 //参数:$func是传递过来的方法名称,$args是传递过来的参数数组 public static function __callStatic($func,$args) { echo "static方法{$func}(".implode(',', $args).")不存在或不可访问!"; } //用静态化方式调用showInfo方法 Student::showInfo();