首頁  >  文章  >  後端開發  >  PHP中物件導向之Final關鍵字詳解(程式碼實例)

PHP中物件導向之Final關鍵字詳解(程式碼實例)

易达
易达原創
2020-05-25 16:31:322193瀏覽

本文目標:

1、了解PHP中Final關鍵字的定義

2、了解PHP中Final關鍵字的作用

3、了解PHP中Final關鍵字的使用場景

4、掌握PHP中Final關鍵字的具體實現

還是按照之前一貫的思路,我們透過3W1H的方式學習,那麼首先我們來了解一下

(一)、了解PHP中Final關鍵字的定義(What)

如果在一個類別前面加上final,那麼這個類別就不能被繼承,如果在一個方法前面加上final,那麼這個方法就不能被重寫

(二)、了解PHP中Final關鍵字的作用(Why)

作用主要有2點:

#1、防止類別被繼承

2、防止類別的方法被重寫

(三)、了解PHP中Final關鍵字的使用場景(Where)

  如果希望一個類別沒有子類,或一個類別的方法不能被重寫,那麼可以考慮用final實作

(四)、掌握PHP中Final關鍵字的具體實作(How)

總結:

1、final類別的定義格式為: final class 類別名稱{}

2、特別注意,PHP5才有final關鍵字的概念,PHP5之前是沒有這個概念的

3、final方法的定義格式為:final public(或protected) function 方法名稱(參數.....){}

4、類別一旦被定義成final類,就不能被繼承,也就是它就不能有子類別了

5、方法一旦被定義成final方法,就不能被子類別重寫

所有的總結都是實踐得出來的,那麼接下來,我們還是要一一證明下,這樣才好放心去用

(五)、具體代碼

1、案例一:

實踐目標:

1、final類別的定義格式為: final class 類別名稱{}

<?php
//定义“人”类
final class Human{
    public function eat(){
        echo "Human 中的eat方法被执行了<br/>";
    }
}

$human = new Human();
$human->eat();
?>

運行結果為:

Human 中的eat方法被執行了

2、案例二:
實踐目標:

1、final方法的定義格式為:final public(或protected) function方法名稱(參數.....){}

<?php
class Human{
    final public function eat(){
        echo "Human 中的 类型为final的eat方法被执行了<br/>";
    }
}
$human = new Human();
$human->eat();
?>

運行結果為:

Human 中的型別為final的eat方法被執行了

3、案例三:

實踐目標:

1、類別一旦定義成final類,就不能繼承,也就是它就不能有子類別了

<?php
//定义“人”类
final class Human{
    public function eat(){
        echo "Human 中的 类型为final的eat方法被执行了<br/>";
    }
}

//定义Nba球员类
class NbaPlayer extends Human{
    public function eat(){
        
    }
}
?>

運行結果為:Fatal error: Class NbaPlayer may not inherit from final class (Human) in D:\E-class\class-code\classing\index.php on line 14


4、案例四:

#實踐目標:

1、方法一旦定義成final方法,就不能用被子類別重寫

<?php
//定义“人”类
class Human{
    final public function eat(){
        echo "Human 中的 类型为final的eat方法被执行了<br/>";
    }
}

//定义Nba球员类
class NbaPlayer extends Human{
    public function eat(){
        echo "NbaPlayer中的eat方法,重写了父类的eat方法<br/>";
    }
}
?>
運行結果為:

Fatal error: Cannot override final method Human::eat() in D:\E-class\class-code\classing\index.php on line 14

(六)、學以致用

到目前為止,我們應該對final有了個清晰的了解,接下來學以致用,用我們學到的這個知識點來解決如下問題

問題:根據多年的經驗總結,很多數據的操作方法其實都是可以被重複使用的,除了在一個專案裡用,很多專案都可以用,而且一個專案的很多地方都可以重複使用,所以打算把這些通用的方法都封裝到一個類別中,但是這個類別沒必要有子類,裡面的方法我也不想讓它被重寫,該怎麼做?

想法分析:

    1.建立一個類別,內麵包含通常的資料操作方法

######    2.因為不希望類別繼承,所以結合final的作用,我們可以把類別定義成final類別######    3.類別一旦定義成final類別了,裡面的方法自然就不會被重寫了,因為沒有了子類,又怎麼可以在子類別中去重寫呢#########具體程式碼如下:######
<?php
final class MyDataOpClass{
    public function abs(){
        //求绝对值
    }
    //产生随机数
    public function rand(){
        echo "产生随机数方法";
    }
    //获取数组中的最大值
    public function getMax($numArr){
        
    }
    //获取数组中的最小值
    public function getMin($numArr){

    }
    //其他方法就此省略
}
$mymath = new MyDataOpClass();
$mymath->rand();
?>
###運行結果如下:######產生隨機數字方法## ####說明:這個例子有點簡單,但是希望大家注意自己的思路分析,要盡可能的準確清晰##########總結:########1、本文主要講解了final的定義和作用以及具體的實現######希望這篇文章能為大家帶來一定的幫助,謝謝大家! ! ! ###

以上是PHP中物件導向之Final關鍵字詳解(程式碼實例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn