目錄
本文目標:
(一)、了解PHP中Final關鍵字的定義(What)
(二)、了解PHP中Final關鍵字的作用(Why)
(三)、了解PHP中Final關鍵字的使用場景(Where)
(四)、掌握PHP中Final關鍵字的具體實作(How)
(五)、具體代碼
問題:根據多年的經驗總結,很多數據的操作方法其實都是可以被重複使用的,除了在一個專案裡用,很多專案都可以用,而且一個專案的很多地方都可以重複使用,所以打算把這些通用的方法都封裝到一個類別中,但是這個類別沒必要有子類,裡面的方法我也不想讓它被重寫,該怎麼做?
首頁 後端開發 php教程 PHP中物件導向之Final關鍵字詳解(程式碼實例)

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

May 25, 2020 pm 04:31 PM
final 物件導向

本文目標:

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1249
24
如何使用Go語言實現物件導向的事件驅動程式設計 如何使用Go語言實現物件導向的事件驅動程式設計 Jul 20, 2023 pm 10:36 PM

如何使用Go語言實現物件導向的事件驅動程式設計引言:物件導向的程式設計範式被廣泛應用於軟體開發中,而事件驅動程式設計是一種常見的程式設計模式,它透過事件的觸發和處理來實現程式的流程控制。本文將介紹如何使用Go語言實現物件導向的事件驅動編程,並提供程式碼範例。一、事件驅動程式設計的概念事件驅動程式設計是一種基於事件和訊息的程式設計模式,它將程式的流程控制轉移到事件的觸發和處理上。在事件驅動

Java中final、finally、finalize的區別 Java中final、finally、finalize的區別 Feb 19, 2024 pm 12:16 PM

Java中final、finally、finalize的區別,需要具體程式碼範例在Java程式設計中,經常會遇到final、finally、finalize這三個關鍵字,它們雖然拼字相似,但卻有不同的意思和用法。本文將詳細解釋這三個關鍵字的區別,同時給出程式碼範例以幫助讀者更好地理解。一、final關鍵字final關鍵字可以用於類別、方法和變數。它的作用是使被修飾的類

@JsonIdentityInfo註解在Java中使用Jackson的重要性是什麼? @JsonIdentityInfo註解在Java中使用Jackson的重要性是什麼? Sep 23, 2023 am 09:37 AM

當物件在Jackson庫中具有父子關係時,將使用@JsonIdentityInfo註解。 @JsonIdentityInfo 註解 用於在序列化和反序列化過程中指示物件身分。 ObjectIdGenerators.PropertyGenerator是一個抽象佔位符類,用來表示要使用的物件識別碼來自POJO屬性的情況。語法@Target(value={ANNOTATION_TYPE,TYPE,FIELD,METHOD,PARAMETER})@Retention(value=RUNTIME)public

在Java中,僅使用final關鍵字可以定義一個常數嗎? 在Java中,僅使用final關鍵字可以定義一個常數嗎? Sep 20, 2023 pm 04:17 PM

常量變數是其值固定且程式中只存在一個副本的變數。一旦你聲明了一個常數變數並給它賦值,你就不能在整個程式中再次改變它的值。與其他語言不同,Java不直接支援常數。但是,你仍然可以透過宣告一個變數為靜態和final來創建一個常數。靜態-一旦你聲明了一個靜態變量,它們將在編譯時加載到內存中,即只有一個副本可用。 Final-一旦你宣告了一個final變量,就不能再修改它的值。因此,你可以透過將實例變數宣告為靜態和final來在Java中創建一個常數。範例 示範classData{&am

PHP高階特性:物件導向程式設計的最佳實踐 PHP高階特性:物件導向程式設計的最佳實踐 Jun 05, 2024 pm 09:39 PM

PHP中OOP最佳實務包括命名約定、介面與抽象類別、繼承與多型、依賴注入。實戰案例包括:使用倉庫模式管理數據,使用策略模式實現排序。

探索Go語言中的物件導向編程 探索Go語言中的物件導向編程 Apr 04, 2024 am 10:39 AM

Go語言支援物件導向編程,透過型別定義和方法關聯實作。它不支援傳統繼承,而是透過組合實現。介面提供了類型間的一致性,允許定義抽象方法。實戰案例展示如何使用OOP管理客戶訊息,包括建立、取得、更新和刪除客戶操作。

Golang中有類似類別的物件導向特性嗎? Golang中有類似類別的物件導向特性嗎? Mar 19, 2024 pm 02:51 PM

在Golang(Go語言)中並沒有傳統意義上的類別的概念,但它提供了一種稱為結構體的資料類型,透過結構體可以實現類似類別的物件導向特性。在本文中,我們將介紹如何使用結構體實現物件導向的特性,並提供具體的程式碼範例。結構體的定義和使用首先,讓我們來看看結構體的定義和使用方式。在Golang中,結構體可以透過type關鍵字定義,然後在需要的地方使用。結構體中可以包含屬

解析PHP物件導向程式設計中的享元模式 解析PHP物件導向程式設計中的享元模式 Aug 14, 2023 pm 05:25 PM

解析PHP物件導向程式設計中的享元模式在物件導向程式設計中,設計模式是一種常用的軟體設計方法,它可以提高程式碼的可讀性、可維護性和可擴充性。享元模式(Flyweightpattern)是設計模式中的一種,它透過共享物件來降低記憶體的開銷。本文將探討如何在PHP中使用享元模式來提升程式效能。什麼是享元模式?享元模式是一種結構型設計模式,它的目的是在不同物件之間共享相同的

See all articles