Home  >  Article  >  Backend Development  >  The difference between php method overloading and rewriting

The difference between php method overloading and rewriting

(*-*)浩
(*-*)浩Original
2019-09-07 11:17:304792browse

The difference between php method overloading and rewriting

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

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

<?php
class human{
  public function say($name){
   echo $name,&#39; 吃了吗?<br />&#39;;
  }
}
 
class stu extends human{
 
  public function say(){
   echo &#39;切克闹,卡猫百比<br />&#39;;
  }
  /*
  public function say($a,$b,$c){
   echo &#39;哥仨好&#39;;
  }
  报错:
  Fatal error: Cannot redeclare stu::say() in D:\wamp\www\php\61.php on line 28
  在PHP中,不允许存在多个同名方法,没有重载概念这一说。
  */
}
 
$li=new stu();
$li->say();
$li->say(&#39;binghui&#39;);// 上面这个过程叫重写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 &#39;未知图形&#39;; 
        } 
    } 
} 
$calc = new Calc(); 
// 计算圆的页面 
echo $calc->area(10),&#39;<br />&#39;; 
// 计算矩形的面积 
echo $calc->area(5,8);
?>

联系 && 区别:

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

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

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

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

The above is the detailed content of The difference between php method overloading and rewriting. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn