定义 : 在一个类中可以出现多个同名方法,彼此之间参数个数和类型不同

  • PHP重载 : 当某些不允许的操作发生时,会自动调用的一种内部机制,来实现错误处理
    • 属性重载 : 属性不存在或者权限不够时自动触发
    • 方法重载 : 方法不存在或者权限不够时自动触发
  • 所有的重载都需使用魔术方法实现

    属性重载

    get(属性名) : 访问不存在的或者权不足的属性时触发
    set(属性名,属性值) : 设置不存在的或者权限不足的属性时触发
    isset(属性名) : 判定不存在的或者权限不足的属性时触发
    unset(属性名) : 删除不存在的或者权限不足的属性时触发
    1. <?php
    2. // 赋值方法
    3. // 类外部给不可调用的属性赋值时自动执行
    4. // 形参2个 第一个代表属性名 第二个代表要赋的值
    5. public function __set($name, $value)
    6. {
    7. // 限制属性赋值的范围
    8. // 可以在类内部取给不可调用的属性赋值
    9. if($name=="sex"){
    10. if($value=="男" or $value=="女"){
    11. $this->$name=$value;
    12. }
    13. }
    14. if($name=="age"){
    15. if($value>0 and $value<=150){
    16. $this->$name=$value;
    17. }
    18. }
    19. }
    20. // 取值方法
    21. // 类外部取不可调用的属性值时 自动执行
    22. // 一个形参 属性名
    23. public function __get($name)
    24. {
    25. return $this->$name;
    26. }
    27. // 类的外部销毁不可调用的属性时 自动执行
    28. // 一个形参 属性名
    29. public function __unset($name)
    30. {
    31. unset($this->$name);
    32. }
    33. // 判断方法
    34. // 类的外部判断不可调用的属性是否存在时 自动执行
    35. // 一个形参 属性名
    36. public function __isset($name)
    37. {
    38. return isset($this->$name);
    39. }

    方法重载

    call(方法名,方法参数列表) : 访问不存在的或者权不足的方法时触发
    callStatic(方法名,方法参数列表) : 访问不存在的或者权不足的静态方法时触发
    1. <?php
    2. // 重载 通过 __call实现
    3. class Test{
    4. // 类外部调用不存在方法时 执行
    5. // 方法重载
    6. public function __call($name, $arguments)
    7. {
    8. // 类外部正在调用 abc方法
    9. if($name=='abc'){
    10. // 参数个数为2个
    11. if(count($arguments)==2){
    12. return "重载1...";
    13. }
    14. // 参数个数为3个
    15. if(count($arguments)==3){
    16. return "重载2...";
    17. }
    18. }
    19. }
    20. }
    21. $test=new Test();
    22. // 在一个类中可以出现多个同名方法,彼此之间参数个数和类型不同
    23. echo $test->abc(1,2); // 2个参数 执行 重载1
    24. echo "<br>";
    25. echo $test->abc(1,2,3); // 3个参数 执行 重载2