1. 程式人生 > >php 之 Final 關鍵字

php 之 Final 關鍵字

本來想寫匿名類的=。=。。不過是php7才支援,相比大家可能版本一般不會那麼高,所以我就不寫了。

引用手冊中的話:
PHP 5 新增了一個 final 關鍵字。如果父類中的方法被宣告為 final,則子類無法覆蓋該方法。如果一個類被宣告為 final,則不能被繼承。

那麼意思說如果有一個final修飾了一個方法,那麼我們在繼承的類裡面就不能重寫他,或者說覆蓋他。那麼我們依然繼承了這個方法。我們看以下程式碼:

<?php
class BaseClass {
   public function test() {
       echo "use test\n";
   }

   final
public function moreTesting() { echo "use moreTesting\n"; } } class ChildClass extends BaseClass { } $obj=new ChildClass(); $obj->moreTesting(); ?>

以上程式碼是手冊裡面的示例,我稍作修改了以下,讓大家看起來爽一點,字不多。好了我們最後兩句是新建childclass類,然後呼叫moreTesting方法,然而我們在基類BaseClass裡面用final修飾了,那麼我們將不能覆蓋此方法,但是可以呼叫,我們執行一下發現將會輸出:


use moreTesting
發現方法被成功呼叫,如果我們嘗試修改以下呢?如下程式碼:

class ChildClass extends BaseClass {
   public function moreTesting() {
       echo "use moreTesting1111111\n";
   }
}

以上程式碼我們直接在childclass裡面重寫方法,或者說覆蓋方法,結果執行將會報錯:
PHP Fatal error: Cannot override final method BaseClass::moreTesting()

那我們現在來試一下用final修飾類:

final class  BaseClass {
   public function test() {
       echo "use test\n";
   }

   final public function moreTesting() {
       echo "use moreTesting\n";
   }
}

然後我們在此執行一下程式碼,然後將會出現
Fatal error: Class ChildClass may not inherit from final class
唔,那麼這個final應該就理解差不多了吧=。=。。。

注:屬性不能被定義為 final,只有類和方法才能被定義為 final。