在PHP中,final關鍵字可以用于修飾類、方法和屬性。此時,final被稱為“終止符”,它將阻止任何繼承或修改。
當final用于方法時,它將被標記為“終止的方法”,即此方法不允許被子類重寫或覆蓋。這個特性通常用于一些核心庫的方法,例如PHP內置的“__construct()”構造函數、魔術方法“__get()”和“__set()”等。
下面是一個簡單的例子。這個PHP類定義了一個final的方法,該方法將返回一個字符串“Hello, World!”:
<?php class MyClass { final function sayHello() { return "Hello, World!"; } } ?>如果有任何其他類嘗試重寫這個方法,PHP將會產生一個致命錯誤。 這個“終止方法”的用法可以通過另一個示例得到體現。以下代碼定義了一個抽象類,該類包含一個抽象方法“doSomething()”。但是,這個類還包含了一個final方法“commonFunction()”,該方法將供子類重用:
<?php abstract class MyAbstractClass { abstract function doSomething(); final function commonFunction() { // ... Some common code for all sub-classes ... } } ?>這個final方法可以被子類繼承和調用,但是不能被它們重寫或修改。因此,所有子類都可以享受這些“共同代碼”的好處,并且它們都必須實現抽象方法“doSomething()”。 與final方法相對的是“虛方法”。虛方法可以被重寫和覆蓋,但是它們也可以有默認實現。虛方法通常在基類中定義,子類可以選擇繼承并重寫它們以滿足自己的需要。 讓我們看一下這個PHP類的例子,該類包含一個虛方法“doSomething()”和另一個虛方法“getSomething()”,該方法提供了默認實現:
<?php class MyBaseClass { function doSomething() { // ... Default implementation ... } function getSomething() { // ... Default implementation ... } } class MyDerivedClass extends MyBaseClass { function doSomething() { // ... Override ... } } ?>在這個例子中,派生類“MyDerivedClass”重寫了基類中的虛方法“doSomething()”,但是它保留了另一個虛方法“getSomething()” 的原始實現。 最后,需要注意的是,final方法的性能通常會比虛方法高得多。因為這些方法在編譯時就已經被決定,不需要通過運行時動態調度進行查找。這意味著它們可以更高效地執行,從而提高代碼的整體性能。