解釋 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 的任何子類。
廣告