• 技术文章 >后端开发 >PHP问题

    php方法重载和重写的区别

    (*-*)浩(*-*)浩2019-09-07 11:17:30原创75

    重写 :(推荐学习:PHP编程从入门到精通

    子类继承父类, 定义和父类名称, 参数列表 完全一致的函数, 新的函数会覆盖旧的方法

    <?php
    class human{
      public function say($name){
       echo $name,' 吃了吗?<br />';
      }
    }
     
    class stu extends human{
     
      public function say(){
       echo '切克闹,卡猫百比<br />';
      }
      /*
      public function say($a,$b,$c){
       echo '哥仨好';
      }
      报错:
      Fatal error: Cannot redeclare stu::say() in D:\wamp\www\php\61.php on line 28
      在PHP中,不允许存在多个同名方法,没有重载概念这一说。
      */
    }
     
    $li=new stu();
    $li->say();
    $li->say('binghui');// 上面这个过程叫重写override!

    重载:

    同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即参数的数量或参数类型不能完全相同

    <?php
    //在PHP中模拟重载的方法
    class Calc { 
        public function area() { 
            // 判断一个调用area时,得到的参数个数 
            $args = func_get_args(); 
            if(count($args) == 1) { 
                return 3.14 * $args[0] * $args[0]; 
            } else if(count($args) == 2) { 
                return $args[0] * $args[1]; 
            } else { 
                return '未知图形'; 
            } 
        } 
    } 
    $calc = new Calc(); 
    // 计算圆的页面 
    echo $calc->area(10),'<br />'; 
    // 计算矩形的面积 
    echo $calc->area(5,8);
    ?>

    联系 && 区别:

    方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性

    重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法和相同的参数列表

    重载对返回类型没有特殊的要求,不能根据返回类型进行区分

    php不支持重载,若要实现类似功能使用 Trait 机制

    以上就是php方法重载和重写的区别的详细内容,更多请关注php中文网其它相关文章!

    phpstudy集成环境下载
    本文原创发布php中文网,转载请注明出处,感谢您的尊重!
    专题推荐:php
    上一篇:php中整数怎么表示 下一篇:php主要用于哪些领域

    相关文章推荐

    • php中sort排序如何使用• php中unset是什么• php中变量有哪些基本数据方式• 如何正确结束php语句?

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网