PHP中抽象類和介面的區別

来源:https://www.cnblogs.com/woods1815/archive/2019/12/21/12078342.html
-Advertisement-
Play Games

抽象類 抽象類無法被實例化,它的作用是為所有繼承自它的類定義(或部分實現)介面。 使用 abstract 關鍵字定義抽象類。 可以像在普通類中那樣在抽象類中創建方法和屬性,在大多數情況下,一個抽象類至少包含一個抽象方法,抽象方法也是通過 abstract 關鍵字聲明的。抽象方法只有方法聲明,沒有方法 ...


抽象類

  1. 抽象類無法被實例化,它的作用是為所有繼承自它的類定義(或部分實現)介面。
  2. 使用 abstract 關鍵字定義抽象類。
  3. 可以像在普通類中那樣在抽象類中創建方法和屬性,在大多數情況下,一個抽象類至少包含一個抽象方法,抽象方法也是通過 abstract 關鍵字聲明的。抽象方法只有方法聲明,沒有方法實現。不能編寫方法體。
abstract class ShopProductWriter
{
    protected $product = [];

    /**
     * 抽象類中可以定義普通方法
     */
    public function addProduct($shopProduct)
    {
        $this->product = $shopProduct;
    }

    /**
     * 定義一個抽象方法,只有方法聲明,沒有方法實現
     */
    abstract public function write();
}
  1. 任何繼承自抽象類的類都必須實現所有的抽象方法,否則它自己就必須被定義為抽象類。子類不能僅僅實現抽象方法,還必須遵守方法簽名。這意味著實現方法的訪問控制不能比抽象方法更嚴格。實現方法還需要有與抽象方法相同數量的參數,以及相同的類型提示。
class XmlProductWriter extends ShopProductWriter
{
    /**
     * 任何繼承自抽象類的類都必須實現所有的抽象方法
     */
    public function write()
    {
        echo 'XmlProductWriter';
    }
}

介面

  1. 抽象類允許我們提供一些實現,但介面則是純粹的模板。介面只定義功能,不能有實現。可以有屬性和方法的聲明,但不能有方法體
  2. 使用 interface 關鍵字聲明介面。
interface Price
{
    /**
     * 只有方法聲明,沒有方法實現
     */
    public function getPrice();
}
  1. 任何實現該介面的類都必須實現這個介面定義的所有方法,否則這個類就只能被聲明為抽象類。
  2. 可以在類的聲明中使用 implements 關鍵字讓它實現介面。
class ShopProduct implements Price
{
    protected $price;

    public function getPrice()
    {
        // TODO: Implement getPrice() method.
        return $this->price;
    }
}
  1. 一個實現類與它所實現的介面具有相同的類型。
  2. 一個類可以在繼承一個父類的同時實現多個介面,implements 關鍵字後面跟著多個介面的名字,它們之間由逗號分隔開來。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 總結: 伺服器根據url找到類全名,通過反射Class.forName(servlet類全名)創建了servlet對象,伺服器將所有請求數據封裝到request對象中,所有響應數據封裝到response中,將request和response傳入service方法,是使用反射調用service方法。 ...
  • 本文主要講解MyBatis中類型轉換的功能,其實在MyBatis中,提供了預設的數據類型之間的轉換,但只是基本數據類型的轉換,如果跨類型進行轉換,則需要自定義轉換類,如java中是boolean類型,在資料庫中則是int類型,則需要進行java類型到jdbc類型的轉換。本文僅供學習分享使用,如有不足... ...
  • 第三方登錄,微信登錄,web登錄,pcweb登錄,pc網站登錄,第三方微信登錄,php第三方網站登錄 ...
  • Object類(所有類的頂級父類) 今天說的兩個方法: equals: 用於比較兩個對象是否相同,它其實是使用兩個對象的記憶體地址進行比較,底層預設使用的是==比較運算符來判斷的。 在以後開發中,要比較兩個對象是否相同,經常會根據對象中的屬性值進行比較。也就是經常需要重寫Object類中的equals ...
  • 如果說數組是 PHP 的精髓,數組玩得不6的,根本不能算是會用PHP。那協程對於 Swoole 也是同理,不理解協程去用 Swoole,那就是在瞎用。 首先,Swoole 只能運行在命令行(Cli)模式下,所以我們開發調試都是使用命令行,而不是 php-fpm/apache 等。 在 Swoole ...
  • 關卡連接: https://codecombat.163.com/play/level/kithgard-librarian 向友好的圖書館管理員求助! 簡介 大多數關卡都有提示,在你卡關時挺有用。 點擊 下一個 來查看關卡的所有提示。 在這關,點擊'Next' 找到圖書館大門的密碼! 預設代碼 # ...
  • 本篇文章給大家帶來的內容是關於swoole運行模式加速laravel應用的詳細介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。 一、Swoole Swoole號稱重新定義了PHP,它是一個PHP擴展,使得PHP可以使用非同步的方式執行,就像node一樣,而且還能使用socket,為 ...
  • 本篇文章給大家帶來的內容是關於初學Swoole:PHP7安裝Swoole的步驟,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。 環境 這裡不在使用apache做為web server。該用nginx + php-fpm,性能更強大,配置更方便。並且為了跟上php的步伐,也使用了比較新 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...