1、了解PHP中Final關鍵字的定義
2、了解PHP中Final關鍵字的作用
3、了解PHP中Final關鍵字的使用場景
4、掌握PHP中Final關鍵字的具體實現
還是按照之前一貫的思路,我們通過3W1H的方式進行學習,那麼首先我們來了解一下
如果在一個類前加final,那麼這個類就不能被繼承,如果在一個方法前加final,那麼這個方法就不能被重寫
作用主要有2點:
1、防止類被繼承
2、防止類的方法被重寫
如果希望一個類沒有子類,或者一個類的方法不能被重寫,那麼可以考慮用final實現
總結:
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-classclass-codeclassingindex.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-classclass-codeclassingindex.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關鍵字詳解(程式碼範例)的詳細內容,更多請關注TW511.COM其它相關文章!