abstract:/** * 一、属性重载 * 1.__set($name,$value):当给不可访问属性赋值时自动调用 * 2.__get($name):当访问不可访问属性的值时自动调用 * 3.__isset($name):当对不可访问属性调用isset()或empty()时自动调用 * 4.__un
/** * 一、属性重载 * 1.__set($name,$value):当给不可访问属性赋值时自动调用 * 2.__get($name):当访问不可访问属性的值时自动调用 * 3.__isset($name):当对不可访问属性调用isset()或empty()时自动调用 * 4.__unset($name):当对不可访问属性调用unset()时自动调用 */ const IS_ISSET = true; const IS_SET = true; const IS_GET = true ; const IS_UNSET = false; class Visited{ protected $data = []; public function __isset($name) { return IS_ISSET && isset($this->data[$name]) ; } public function __get($name) { return IS_GET ? $this->data[$name]: '非法访问'; } public function __set($name, $value) { IS_SET ? $this->data[$name]=$value:'禁止赋值'; } public function __unset($name) { if(IS_UNSET) { unset($this->data[$name]); }else{ echo '禁止销毁'; } } } $visited = new Visited(); if(isset($visited->table)) { echo $visited->table.'<br>'; } else { $visited->table = 'table_staff'; } //访问 echo $visited->table.'<br>'; //更新 $visited->table = 'table_food'; unset($visited->table); echo $visited->table.'<br>'; echo '<hr>'; /** * 二、方法重载 * 1.__call($method,array $args):访问对象中不可访问的方法时,自动调用 * 2.__callStatic($method,array $args):在静态上下文中调用一个不可访问方法时调用 * method: 方法名, $args: 枚举数组,里面存放着传递给方法的参数 */ //导入本例要跨类调用的方法所属类文件 require './public/Site.php'; class Web { public function __call($method, $arguments) { // return '方法是:'.$method.'<br>参数列表:'.var_export($arguments,true); //方法重载更多的用在跨类的方法调用上,将这个魔术方法当做跳板('类名创建对象','方法') return call_user_func_array([(new Site),'show'],$arguments); } //当访问一个不存在或不可访问的静态方法时自动调用 ('类名','方法') public static function __callStatic($method, $arguments) { // 同样,我们也跨类静态调用一个静态方法 return call_user_func_array(['Site','add'],$arguments); } } $web = new Web(); //访问一个不存在的动态方法 echo $web->show('php中文网','海量资源.免费公益').'<hr>'; //访问一个不存在的静态方法 echo Web::add(30,90);
重载分为属性重载和方法重载:
属性重载:
__set($name,$value):当给不可访问属性赋值时自动调用
__get($name):当访问不可访问属性的值时自动调用
__isset($name):当对不可访问属性调用isset()或empty()时自动调用
__unset($name):当对不可访问属性调用unset()时自动调用
方法重载:
__call($method,array $args):访问对象中不可访问的方法时,自动调用
使用 call_user_func_array([(new Site),'show'],$arguments);
注意 : ('类名创建对象','方法')
__callStatic($method,array $args):在静态上下文中调用一个不可访问方法时调用
注意: ('类名','方法')
method: 方法名, $args: 枚举数组,里面存放着传递给方法的参数