在PHP中实现方法覆盖

时间:2015-03-05 13:40:24

标签: php oop

我已经在OOPS中实现了方法覆盖,但我不确定如何在PHP中实现方法覆盖。当您创建具有相同名称的函数时,它将为您提供有关函数重新声明的错误。

1 个答案:

答案 0 :(得分:3)

PHP中的方法覆盖实际上非常简单。您只需指定基类,然后在派生类中创建一个具有相同名称的方法(函数)。

class BaseClass {
  public function first_method() {
    echo("Hello! I am the base!\n");
  }
  public function do_something() {
    echo("Hi, there! I am the base!\n");
  }
}

class AnotherClass extends BaseClass {
  public function do_something() {
    echo("Hi, there! I am a derivative!\n");
  }
}

$base_class = new BaseClass();
$another_class = new AnotherClass();
$base_class->do_something();
$another_class->do_something();
$another_class->first_method();

编辑以涵盖方法重载的可能问题: - )

如果您打算询问方法重载,那么您应该知道它无法在PHP中完成。还有另一个功能最终会给你相同的结果:默认参数。以下是适用于这两种方法和功能的潜在用例:

function first_function($a, $b=NULL) {
  echo($a);
  if($b!==NULL) {
    echo($b);
  }
}

这与两个名为first_function的函数(例如在C ++中)基本相同,其中每个函数都有不同数量的参数,如下所示:

void first_function(int a) {
  cout << a << endl;
}

void first_function(int a, int b) {
  cout << a << endl;
  cout << b << endl;
}

避免传统方法重载更有意义,因为PHP是一种松散类型的语言。使用具有相同数量的参数的两个函数结束将导致死胡同,因为PHP解释器无法确定您要调用这两个函数中的哪一个,因为PHP中没有类型敏感性。