搜尋
首頁後端開發php教程PHP OOP部分-抽象與介面

PHP OOP Part-Abstraction and Interface

在本系列中,我將介紹 PHP 物件導向程式設計 (OOP) 的基礎知識。內容將被組織成連續的部分,每個部分都專注於一個特定的主題。如果您是初學者或不熟悉 OOP 概念,本系列旨在逐步指導您。 在這一部分中,我將討論 PHP 中的抽象和介面。讓我們一起開始學習PHP OOP的旅程吧!

PHP 中的抽像是什麼?

我們知道,在物件導向程式設計中,抽像是一個重要的概念。那麼,什麼是抽象呢?抽像是指隱藏程式的實作細節,僅顯示其功能。

現在,讓我們試著了解 PHP 中的抽像是如何運作的。首先,我們來看一個簡單的例子,其中有一個父類,一個或多個子類別將從該父類別繼承。之後,我們將討論這種方法的缺點。

程式碼範例

class Vehicle
{
   public function getBaseFare()
   {
      // implementation
   }

   public function getPerKiloFare()
   {
      // implementation
   }

   public function getTotalFare()
   {
      // implementation
   }
}


class Car extends Vehicle
{
   // Car implementation
}

class Bike extends Vehicle
{
   // Bike implementation
}

在這裡我們可以看到Vehicle類別被Car和Bike類別繼承。因此,這兩個類別都可以存取 Vehicle 類別中存在的方法。但是,有一個問題:父類別中的方法帶有其實現,子類別繼承了這些實作。這意味著所有子類別將共享一個公共實作並以相同的方式運作。但情況不應該是這樣,因為汽車的行為應該與自行車的行為不同。但是,由於我們從父類別繼承了這些方法,因此兩個類別的行為方式相同。

現在,如果在繼承這些通用方法之後,我們希望它們對每個類別有不同的行為,該怎麼辦?

為了解決這個問題,PHP 提供了 Abstract 類別。什麼是抽象類別?

抽象類別是一種可以同時具有抽象方法和非抽象方法的類別。那麼,什麼是抽象方法和非抽象方法?

抽象方法是只有定義而沒有實現的方法。因此,當子類別繼承父類別時,它必須提供父類別抽象方法的實作。

非抽象方法是在父類別中同時具有定義和實作的方法。子類別只需繼承這些方法並可以使用它們。

現在,我們將嘗試使用抽象類別來解決上述問題。

程式碼範例

class Vehicle
{
   public function getBaseFare()
   {
      // implementation
   }

   public function getPerKiloFare()
   {
      // implementation
   }

   public function getTotalFare()
   {
      // implementation
   }
}


class Car extends Vehicle
{
   // Car implementation
}

class Bike extends Vehicle
{
   // Bike implementation
}

在這裡我們可以看到有一個名為Vehicle的類別。如果我們想讓一個類別抽象,我們需要在類別名稱前使用abstract關鍵字。因此,Vehicle類別是一個抽象類別。同樣,如果我們想在抽象類別中建立一個方法,我們需要在方法名稱前使用abstract關鍵字。需要注意的是,如果我們想要讓類別的任何成員成為抽象類,那麼該類別也必須是抽象類別。

現在,從Vehicle類別繼承的抽象方法在每個子類別中都有不同的實作。因此,這些方法的行為會有所不同,並為每個子類別提供不同的結果。

現在,我們可能想知道為什麼我們必須在父類別中抽象方法 getBaseFare 和 getPerKiloFare,而我們可以簡單地直接在子類別中實作它們。

如果您仔細觀察,您會注意到在父類別中,方法 getBaseFare 和 getPerKiloFare 在另一個方法中使用。但是,如果我們沒有抽象 getBaseFare 和 getPerKiloFare 並且僅在子類別中實作它們,我們將無法在父類別中存取它們。因此,需要被父類別和子類別訪問,並且其行為在每個子類別中應該不同的方法被抽象化。

要注意的是,抽象類別不能直接實例化。而是透過子類別來訪問,並且從抽象類別繼承的抽象方法必須在子類別中實現。如果不這樣做,子類別中的任何內容都將不起作用。我希望這能讓您更理解如何使用抽象類別。

PHP 中的介面是什麼?

在前面的討論中,我們討論了抽象類別。由此我們知道,當從抽象類別繼承抽象方法時,這些方法必須在子類別中實作;否則,子類別中的任何內容都將不起作用。

但是,如果在子類別中不需要其中一個抽象方法,但仍然需要實作它怎麼辦?這不會是一個好的解決方案。那麼,這種情況我們能做什麼呢?

在這種情況下,我們可以使用介面。介面類似於抽象類別,但抽象類別並不完全抽象,因為眾所周知,抽象類別可以同時擁有抽象和非抽象成員。

另一方面,介面只能有抽象成員。因此,介面被認為是完全抽象的類別。現在,我們將嘗試使用介面來解決上述問題。

程式碼範例

class Vehicle
{
   public function getBaseFare()
   {
      // implementation
   }

   public function getPerKiloFare()
   {
      // implementation
   }

   public function getTotalFare()
   {
      // implementation
   }
}


class Car extends Vehicle
{
   // Car implementation
}

class Bike extends Vehicle
{
   // Bike implementation
}

在介面中,我們看到 getHourlyRate 函數的宣告。然後,在Car類別中,我們使用(實作或繼承)這個介面並提供介面內部抽象方法的實作。但是,在 Bike 類別中,我們不必實作此方法,因為我們沒有在 Bike 類別中使用(實作或繼承)該介面。但是,如果這個抽象方法位於抽象類別中,我們將被迫在兩個子類別中實作這個方法,即使不需要它,這也會導致糟糕的設計。此外,介面還有各種其他用例。

我希望這一集能讓您對所討論的主題有基本的了解。這就是今天的全部內容。我們下節課再講。

您可以在 GitHub 和 Linkedin 上與我聯絡。

以上是PHP OOP部分-抽象與介面的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
高流量網站的PHP性能調整高流量網站的PHP性能調整May 14, 2025 am 12:13 AM

TheSecretTokeEpingAphp-PowerEdwebSiterUnningSmoothlyShyunderHeavyLoadInVolvOLVOLVOLDEVERSALKEYSTRATICES:1)emplactopCodeCachingWithOpcachingWithOpCacheToreCescriptexecution Time,2)使用atabasequercachingCachingCachingWithRedataBasEndataBaseLeSendataBaseLoad,3)

PHP中的依賴注入:初學者的代碼示例PHP中的依賴注入:初學者的代碼示例May 14, 2025 am 12:08 AM

你應該關心DependencyInjection(DI),因為它能讓你的代碼更清晰、更易維護。 1)DI通過解耦類,使其更模塊化,2)提高了測試的便捷性和代碼的靈活性,3)使用DI容器可以管理複雜的依賴關係,但要注意性能影響和循環依賴問題,4)最佳實踐是依賴於抽象接口,實現鬆散耦合。

PHP性能:是否可以優化應用程序?PHP性能:是否可以優化應用程序?May 14, 2025 am 12:04 AM

是的,優化papplicationispossibleandessential.1)empartcachingingcachingusedapcutorediucedsatabaseload.2)優化的atabaseswithexing,高效Quereteries,and ConconnectionPooling.3)EnhanceCodeWithBuilt-unctions,避免使用,避免使用ingglobalalairaiables,並避免使用

PHP性能優化:最終指南PHP性能優化:最終指南May 14, 2025 am 12:02 AM

theKeyStrategiestosigantificallyBoostPhpaPplicationPerformenCeare:1)UseOpCodeCachingLikeLikeLikeLikeLikeCacheToreDuceExecutiontime,2)優化AtabaseInteractionswithPreparedStateTementStatementStatementAndProperIndexing,3)配置

PHP依賴注入容器:快速啟動PHP依賴注入容器:快速啟動May 13, 2025 am 12:11 AM

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增強codemodocultion,可驗證性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

PHP中的依賴注入與服務定位器PHP中的依賴注入與服務定位器May 13, 2025 am 12:10 AM

選擇DependencyInjection(DI)用於大型應用,ServiceLocator適合小型項目或原型。 1)DI通過構造函數注入依賴,提高代碼的測試性和模塊化。 2)ServiceLocator通過中心註冊獲取服務,方便但可能導致代碼耦合度增加。

PHP性能優化策略。PHP性能優化策略。May 13, 2025 am 12:06 AM

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)啟用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替換loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

PHP電子郵件驗證:確保正確發送電子郵件PHP電子郵件驗證:確保正確發送電子郵件May 13, 2025 am 12:06 AM

phpemailvalidation invoLvesthreesteps:1)格式化進行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 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脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。