//重载技术 //重载:动态的创建类属性和方法 //属性重载 //__set(),__get(),__isset(),__unset() //const IS_ISSET = true; //const IS_GET = true; //const IS_SET = true; //const IS_UNSET = false; // //class Visit //{ // 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 '禁止删除'; // } // } //} // //$visit = new Visit(); //if (isset($visit->table)) { // echo $visit->table . '<br>'; //} else { // $visit->table = 'table_staff'; //} // ////访问 //echo $visit->table . '<br>'; // ////更新 //$visit->table = '员工表' . '<br>'; // ////访问 //echo $visit->table . '<br>'; // //unset($visit->table); //方法重载 //_call(),_callStatic() //class Site //{ // public function show($argumnets) // { // $title = func_get_arg(0);//获取方法中的参数 // $desc = func_get_arg(1); // return 'Site::show()<br>站点名称' . $title . '<br>站点描述:' . $desc; // } // // public static function add($argument) // { // $m = func_get_arg(0); // $n = func_get_arg(1); // return 'Site::add()<br>'.$m.'+'.$n.'='.($m+$n); // } //} // //class Web //{ // //当访问一个不存在的动态方法的时候会自动调用,$name为方法名,$arguments为参数 // public function __call($name, $arguments) // { //// return '方法:'.$name.'<br>参数列表:'.var_export($arguments,true); // //方法重载更多的用在跨类的方法调用上,第一个参数为一个数组,数组的第一个值为要访问的类的实例化,第二个值为调用的访问类的方法,第二个参数为传给该方法的值 // return call_user_func_array([(new Site),'show'],$arguments); // } // // //当访问一个不存在的静态方法的时候会自动调用,$name为方法名,$arguments为参数 // public static function __callStatic($name, $arguments) // { // //跨类调用一个静态方法 // return call_user_func_array(['Site','add'],$arguments); // } // //} // //$web = new Web(); // ////访问一个不存在的方法 //echo $web->show('李铭炜','牛逼').'<hr>'; //echo Web::add('1','2');
属性重载的方法:
__get()方法:在外部对内部成员的值进行访问时自动调用
__set()方法:在外部对内部存在或不存在的成员进行初始化或者赋值时自动调用
__isset()方法:在外部判断内部成员是否存在时自动调用
__unset()方法:在外部对内部成员进行删除操作时自动调用,若不进行覆写,默认外部无法删除内部成员
方法重载的方法:
__call()方法:在外部调用类中不存在的动态方法时触发重载方法
__callStatic()方法:在外部调用类中不存在的静态方法时触发重载方法
call_user_func([类名,方法名],传过去的参数(字符串类型))函数:调用一个回调函数(常为其他类的方法)处理传过去的参数
call_user_func_array([类名,方法名],传过去的参数(数组类型))函数:调用一个回调函数(常为其他类的方法),处理传过去的参数