解釋 PHP 中的 final 類和 final 方法。


final 關鍵字是由 PHP5 引入的,與面向物件程式設計的概念相關。

但在我們深入瞭解 final 之前,我們需要確保我們對繼承的概念有很好的理解。在繼承中,我們可以從另一個類繼承一個類。此外,我們可以在繼承類中重寫一個函式,以替換最初提供的行為。在某些情況下,我們可能需要阻止從一個類繼承,或者我們可能需要阻止重寫一個函式。這可以透過 final 來實現,方法是在類和函式前加上 final 關鍵字,這實際上會導致 PHP 在任何人試圖擴充套件 final 類或重寫 final 函式時產生錯誤。

注意

我們只能對方法和類使用 final 關鍵字。

讓我們透過以下示例演示這個概念。

示例

我們不能重寫父類函式。

<?php
   class BaseClass{
      final function calculate($val1,$val2){
         $sum = $val1+$val2;
         echo "Sum of given no=".$sum;
         }
      }
   class ChildClass extends BaseClass{
      function calculate($x,$y){
         $mult=$val1*$val2;
         echo "Multiplication of given no=".$mult;
         }
      }
   $obj= new ChildClass();
   $obj->show(10,10);
?>

輸出

PHP Fatal error: Cannot override final method BaseClass::calculate()

解釋

在上面的示例中,BaseClass 類是父類。其中 calculate 方法被標記為 final。這意味著我們不能在其任何子類中重寫 show 方法。為了識別錯誤,ChildClass 試圖定義 final 方法 show()。這將產生一個致命錯誤,這意味著父類的 final 方法不能在其子類中定義。

示例

在類名前使用 "Final" 關鍵字

<?php
   final Class BaseClass{
      function printData($val1,$val2){
         $add=$val1+$val2;
         echo "Sum of given no=".$s;
         }
      }
   class Child extends BaseClass{
      function printData($val1,$val2){
         $m=$val1*$val2;
         echo "Multiplication of given no=".$m;
         }
      }
   $obj= new Child();
   $obj->printData(20,20);
?>

輸出

PHP Fatal error: Class Child may not inherit from final class (BaseClass)

解釋

在上面的示例中,BaseClass 類用 final 定義,因此我們不能擴充套件此類。當 Child 類試圖從 BaseClass 繼承時(這意味著 Child 是 BaseClass 的子類),PHP 會丟擲一個錯誤訊息“類 Child 不能繼承自 final 類 (BaseClass)”。這意味著它不允許建立 BaseClass 的任何子類。

更新於:2019年7月30日

1K+ 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告