[PHP] 什么是覆盖(Override)?

我今年24岁,是一个新手。

我正在学习PHP的基础知识,然后遇到了像标题那样的外来语。编程中出现的词汇都是外来语,有点像我在高中时读的轻小说,很有趣(个人感觉)。其中,“重写”这个词听起来很久没让我的灵魂触动了…所以我想把它写下来当做备忘录。

覆写是指…

在子类中重新定义一个与父类中已定义的方法同名的方法,这称为方法重写(覆盖)。例如

// 親クラス

class Goku {
  public function skill($name, $damage){
    print "名前 = {$name} : ダメージ = {$damage}". '<br>'; 
  }
}

// 子クラス 

class Gohan extends Goku {
  public function skill($name, $damage){
    print "悟飯の必殺技!名前は、{$name}!なんと{$damage}ダメージも敵に与える事ができるんだ!"; 
  }
}

我决定重写子类的skill()方法。在父类中,只显示简洁信息的冷淡方法,而在子类中,我决定重新定义成显示像滚滚漫画一样的热情信息的方法。

现在执行该方法。

$dragonball = new Goku();
$dragonball->skill('かめはめ波', '500');
$dragonballZ = new Gohan();
$dragonballZ->skill('かめはめ波', '500');

然后结果是

名前 = かめはめ波 : ダメージ = 500
悟飯の必殺技!名前は、かめはめ波!なんと500ダメージも敵に与える事ができるんだ!

这是这样的,第一行是父类的skill(),下面是子类的skill()。已经被覆盖了。

覆写的好处在于,如果我们创建多个子类并准备好覆写的方法,就能应对各种不同的情况。

但是如果进行重写,就会导致同名方法存在多个的情况。这可能会让人感到困惑,当想要调用目标方法时却可能调用了其他方法。但不必担心。不需要进行特殊处理。只需要按照上述方法正常实例化类并关联调用方法即可。

参考文献:金城俊哉的《PHP服务器端编程完全掌握》。

广告
将在 10 秒后关闭
bannerAds