什么是php中的函数重载和覆盖?

2022-08-30 06:58:03

在PHP中,函数重载和函数覆盖是什么意思。它们之间有什么区别?无法弄清楚它们之间的区别是什么。


答案 1

重载是定义具有相似签名但具有不同参数的函数。重写仅与派生类相关,其中父类已定义方法,而派生类希望重写该方法。

在 PHP 中,您只能使用魔术方法重载方法__call

重写的示例:

<?php

class Foo {
   function myFoo() {
      return "Foo";
   }
}

class Bar extends Foo {
   function myFoo() {
      return "Bar";
   }
}

$foo = new Foo;
$bar = new Bar;
echo($foo->myFoo()); //"Foo"
echo($bar->myFoo()); //"Bar"
?>

答案 2

当您使用不同的参数集定义相同的函数名称两次(或更多次)时,会发生函数重载。例如:

class Addition {
  function compute($first, $second) {
    return $first+$second;
  }

  function compute($first, $second, $third) {
    return $first+$second+$third;
  }
}

在上面的示例中,该函数使用两个不同的参数签名重载。*PHP 尚不支持此功能。另一种方法是使用可选参数:compute

class Addition {
  function compute($first, $second, $third = 0) {
    return $first+$second+$third;
  }
}

当您扩展类并重写父类中存在的函数时,会发生函数重写:

class Substraction extends Addition {
  function compute($first, $second, $third = 0) {
    return $first-$second-$third;
  }
}

例如,将覆盖 中规定的行为。computeAddition


推荐