搜尋
首頁後端開發php教程php中static、final、interface、abstract的區別

這篇文章主要介紹了關於php中static、final、interface、abstract的區別,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

final

如果父類別中的方法被宣告為final,則子類別無法覆寫該方法。如果一個類別被宣告為 final,則不能被繼承。

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

static

靜態變數可以是局部變數也可以是全域變量,當程式段執行完成時,靜態變數並沒有消失,它依然存在於記憶體中,下次在定義時還是以前的值,常用於遞歸或子函數中保留之前的值,可以用來定義變數和方法;單例模式也用的是這個;

1.一般靜態屬性用來保存類別的公有資料

2、靜態方法內部只能存取靜態屬性,包括本類別和父類別的

3、靜態成員不需要實例化物件就可以存取

#4.在本類內部訪問靜態屬性用self或static關鍵字訪問,後面帶上的變數要包括$,例如: self::$a或者static::$a

5、訪問父類靜態屬性使用parent,如:parent::$name

6、在類別外部存取靜態變數或方法時使用類別名稱直接訪問,無需實例化。如:Me::$pan和Me::abc()

abstract

抽象類別abstract class

#1 .抽象類別是指在 class 前加了 abstract 關鍵字且有抽象方法(在類別方法 function 關鍵字前加了 abstract 關鍵字)的類別。

2 .抽象類別不能被直接實例化。抽象類別中只定義(或部分實作)子類別所需的方法。子類別可以透過繼承抽象類別並透過實作抽象類別中的所有抽象方法,使抽象類別具體化。

3 .如果子類別需要實例化,前提是它實作了抽象類別中的所有抽象方法。如果子類別沒有全部實作抽象類別中的所有抽象方法,那麼該子類別也是一個抽象類,必須在 class 前面加上 abstract 關鍵字,並且不能被實例化。

4 .如果子類別實作了抽象方法,那麼 子類別中抽象方法的存取控制不能比父類別中的抽象方法存取控制更嚴格,也就是說(A父類,B子類別)

#  (1 )      如果 A 中 abstract_func() 聲明為 public ,則為 B 中 abstract_func() 的聲明只能是 public , _func() 聲明為 protected ,那麼 B中 abstract_func() 的聲明可以是 public 或 protected ,但不能是 private

  (3)       A  abstract_f(private f ( 

Fatal error 

: Abstract function A::abstract_func() cannot be declared private )#interface

1 .抽象類別提供了具體實現的標準,而介面則是純粹的模版。介面只定義功能,而不包含實作的內容。介面用關鍵字 interface 來聲明。

2 . interface 是完全抽象的,只能宣告方法,只能宣告 public 的方法,不能宣告 private 及 protected 的方法,且無法定義方法體,也不能宣告實例變數 。

3 . interface 卻可以宣告常數變數 。但將常數變數放在 interface 中違反了其作為介面的作用而存在的宗旨,也混淆了 interface 與類別的不同價值。如果的確需要,可以將其放在對應的 abstract class 或 Class 中。

4 .任何實作介面的類別都要實作介面中所定義的所有方法,否則該類別必須聲明為 abstract 。

5 .一個類別可以在聲明中使用 implements 關鍵字來實作某個介面。這麼做之後,實作介面的具體過程和繼承一個只包含抽象方法的抽象類別是一樣的。

6 .一個類別可以同時繼承一個父類別和實作任意多個介面。 extends 子句應該在 implements 子句之前。 PHP 只支援繼承自一個父類,因此 extends 關鍵字後面只能跟著一個類別名稱。

7 .介面無法實作另一個接口,但可以繼承多個

三、 抽象類別和介面的異同

1. 相同點:

  (1)      兩者皆是抽象類,都不能實例化。

  (2)      interface 實作類別及 abstract class 的子類別必須實現已宣告的抽象方法。

2. 不同點:

  (1)      interface 需要實現,要用 implements ,而 abstract class 則需要繼承,而使用 extends 。

  (2)      一個類別可以實現多個 interface ,但一個類別只能繼承一個 abstract class 。

  (3)      interface 則強調特定功能的實現,而 abstract class 則強調所屬關係。

  (4)      儘管 interface 實現類別及 abstract class 的子類別都必須實現對應的抽象方法,但實現的形式不同。 interface 中的每個方法都是抽象方法,都只是宣告的 (declaration, 沒有方法體 ) ,而實作類別必須實作。而 abstract class 的子類別可以選擇性地實現。

    這個選擇有兩點意義: 

    a) abstract class 中並非所有的方法都是抽象的,只有那些冠有 abstract 的方法才是抽象的,子類別必須實現。那些沒有 abstract 的方法,在 abstract class 中必須定義方法體;

    b) abstract class 的子類別在繼承它時,對非抽象方法既可以直接繼承,也可以覆寫;而對抽象方法,可以選擇實現,也可以留給其子類別來實現,但此類必須也聲明為抽象類別。既是抽象類,當然也不能實例化。

  (5)      abstract class 是 interface 與 class 的中介。 abstract class 在 interface 及 class 中起到了承上啟下的作用。

    一方面, abstract class 是抽象的,可以宣告抽象方法,以規範子類別必須實現的功能;

    另一方面,它又可以定義為缺省的方法體,供缺子類別直接使用或覆蓋。另外,它還可以定義自己的實例變量,以供子類別透過繼承來使用。

  (6)      介面中的抽象方法前不用也不能加 abstract 關鍵字,預設隱式就是抽象方法,也不能加 final 關鍵字來防止抽象方法的繼承。而抽象類別中抽象方法前則必須加上 abstract 表示顯示宣告為抽象方​​法。

  (7)      介面中的抽象方法預設為 public 的,且只能是 public 的,且無法用 private , protected 修飾子修飾。而抽象類別中的抽象方法則可以用 public ,protected 來修飾,但不能用 private 。

3. interface 的應用場合

  (1)      類別與類別之間需要特定的介面進行協調,且不在乎其如何實現。

  (2)      作為能夠實現特定功能的識別存在,也可以是什麼接口方法都沒有的純粹標識。

  (3)      則需要將一組類別視為單一的類別,而呼叫者只透過介面來與這群類別連結。

  (4)      則需要達到特定的多項功能,而這些功能之間可能完全沒有任何關聯。

4. abstract class 的應用場合

  一句話,在既需要統一的接口,又需要實例變數或缺省的方法的情況下,就可以使用它。最常見的有:

  (1)      定義了一組接口,但又不想強迫每個實作類別都必須實作所有的介面。可以用 abstract class 定義一組方法體,甚至可以是空方法體,然後由子類別選擇自己感興趣的方法來覆寫。

  (2)      某些場合下,只靠純粹的介面無法滿足類別與類別之間的協調,以及在必需類別中表示狀態的變數來區分不同的關係。 abstract 的中介作用可以很好地滿足這一點。

  (3)      規範了一組相互協調的方法,其中一些方法是共同的,與狀態無關的,可以共享的,無需子類分別實現;而另一些方法卻需要各個子類根據自己特定的狀態來實現特 定的功能 。

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

php根據經緯度排序和根據經緯度篩選距離段

PHP中Define和Const的區別

以上是php中static、final、interface、abstract的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP:服務器端腳本語言的簡介PHP:服務器端腳本語言的簡介Apr 16, 2025 am 12:18 AM

PHP是一種服務器端腳本語言,用於動態網頁開發和服務器端應用程序。 1.PHP是一種解釋型語言,無需編譯,適合快速開發。 2.PHP代碼嵌入HTML中,易於網頁開發。 3.PHP處理服務器端邏輯,生成HTML輸出,支持用戶交互和數據處理。 4.PHP可與數據庫交互,處理表單提交,執行服務器端任務。

PHP和網絡:探索其長期影響PHP和網絡:探索其長期影響Apr 16, 2025 am 12:17 AM

PHP在過去幾十年中塑造了網絡,並將繼續在Web開發中扮演重要角色。 1)PHP起源於1994年,因其易用性和與MySQL的無縫集成成為開發者首選。 2)其核心功能包括生成動態內容和與數據庫的集成,使得網站能夠實時更新和個性化展示。 3)PHP的廣泛應用和生態系統推動了其長期影響,但也面臨版本更新和安全性挑戰。 4)近年來的性能改進,如PHP7的發布,使其能與現代語言競爭。 5)未來,PHP需應對容器化、微服務等新挑戰,但其靈活性和活躍社區使其具備適應能力。

為什麼要使用PHP?解釋的優點和好處為什麼要使用PHP?解釋的優點和好處Apr 16, 2025 am 12:16 AM

PHP的核心優勢包括易於學習、強大的web開發支持、豐富的庫和框架、高性能和可擴展性、跨平台兼容性以及成本效益高。 1)易於學習和使用,適合初學者;2)與web服務器集成好,支持多種數據庫;3)擁有如Laravel等強大框架;4)通過優化可實現高性能;5)支持多種操作系統;6)開源,降低開發成本。

揭穿神話:PHP真的是一種死語嗎?揭穿神話:PHP真的是一種死語嗎?Apr 16, 2025 am 12:15 AM

PHP沒有死。 1)PHP社區積極解決性能和安全問題,PHP7.x提升了性能。 2)PHP適合現代Web開發,廣泛用於大型網站。 3)PHP易學且服務器表現出色,但類型系統不如靜態語言嚴格。 4)PHP在內容管理和電商領域仍重要,生態系統不斷進化。 5)通過OPcache和APC等優化性能,使用OOP和設計模式提升代碼質量。

PHP與Python辯論:哪個更好?PHP與Python辯論:哪個更好?Apr 16, 2025 am 12:03 AM

PHP和Python各有優劣,選擇取決於項目需求。 1)PHP適合Web開發,易學,社區資源豐富,但語法不夠現代,性能和安全性需注意。 2)Python適用於數據科學和機器學習,語法簡潔,易學,但執行速度和內存管理有瓶頸。

PHP的目的:構建動態網站PHP的目的:構建動態網站Apr 15, 2025 am 12:18 AM

PHP用於構建動態網站,其核心功能包括:1.生成動態內容,通過與數據庫對接實時生成網頁;2.處理用戶交互和表單提交,驗證輸入並響應操作;3.管理會話和用戶認證,提供個性化體驗;4.優化性能和遵循最佳實踐,提升網站效率和安全性。

PHP:處理數據庫和服務器端邏輯PHP:處理數據庫和服務器端邏輯Apr 15, 2025 am 12:15 AM

PHP在數據庫操作和服務器端邏輯處理中使用MySQLi和PDO擴展進行數據庫交互,並通過會話管理等功能處理服務器端邏輯。 1)使用MySQLi或PDO連接數據庫,執行SQL查詢。 2)通過會話管理等功能處理HTTP請求和用戶狀態。 3)使用事務確保數據庫操作的原子性。 4)防止SQL注入,使用異常處理和關閉連接來調試。 5)通過索引和緩存優化性能,編寫可讀性高的代碼並進行錯誤處理。

您如何防止PHP中的SQL注入? (準備的陳述,PDO)您如何防止PHP中的SQL注入? (準備的陳述,PDO)Apr 15, 2025 am 12:15 AM

在PHP中使用預處理語句和PDO可以有效防範SQL注入攻擊。 1)使用PDO連接數據庫並設置錯誤模式。 2)通過prepare方法創建預處理語句,使用佔位符和execute方法傳遞數據。 3)處理查詢結果並確保代碼的安全性和性能。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具