定义 : 在一个类中可以出现多个同名方法,彼此之间参数个数和类型不同
- PHP重载 : 当某些不允许的操作发生时,会自动调用的一种内部机制,来实现错误处理
- 属性重载 : 属性不存在或者权限不够时自动触发
- 方法重载 : 方法不存在或者权限不够时自动触发
- 所有的重载都需使用魔术方法实现
属性重载
get(属性名) : 访问不存在的或者权不足的属性时触发
set(属性名,属性值) : 设置不存在的或者权限不足的属性时触发
isset(属性名) : 判定不存在的或者权限不足的属性时触发
unset(属性名) : 删除不存在的或者权限不足的属性时触发<?php// 赋值方法// 类外部给不可调用的属性赋值时自动执行// 形参2个 第一个代表属性名 第二个代表要赋的值public function __set($name, $value){// 限制属性赋值的范围// 可以在类内部取给不可调用的属性赋值if($name=="sex"){if($value=="男" or $value=="女"){$this->$name=$value;}}if($name=="age"){if($value>0 and $value<=150){$this->$name=$value;}}}// 取值方法// 类外部取不可调用的属性值时 自动执行// 一个形参 属性名public function __get($name){return $this->$name;}// 类的外部销毁不可调用的属性时 自动执行// 一个形参 属性名public function __unset($name){unset($this->$name);}// 判断方法// 类的外部判断不可调用的属性是否存在时 自动执行// 一个形参 属性名public function __isset($name){return isset($this->$name);}
方法重载
call(方法名,方法参数列表) : 访问不存在的或者权不足的方法时触发
callStatic(方法名,方法参数列表) : 访问不存在的或者权不足的静态方法时触发<?php// 重载 通过 __call实现class Test{// 类外部调用不存在方法时 执行// 方法重载public function __call($name, $arguments){// 类外部正在调用 abc方法if($name=='abc'){// 参数个数为2个if(count($arguments)==2){return "重载1...";}// 参数个数为3个if(count($arguments)==3){return "重载2...";}}}}$test=new Test();// 在一个类中可以出现多个同名方法,彼此之间参数个数和类型不同echo $test->abc(1,2); // 2个参数 执行 重载1echo "<br>";echo $test->abc(1,2,3); // 3个参数 执行 重载2
