首頁 後端開發 php教程 php物件導向語法5 final類,抽象類,介面結構(不是類別)

php物件導向語法5 final類,抽象類,介面結構(不是類別)

Dec 28, 2016 am 10:12 AM

類別的作用 
1實例化物件 
2作為其他類別的基礎類,被繼承! 
3呼叫其靜態成員

兩大主要功能:實例化物件、被繼承。

存在兩種特殊的類,功能單一! 
1, **只能實例化對象,不能被繼承。 **final類別 
2, 只能被繼承,不能實例化物件。抽象類別

final類別和final方法 
final 類別是繼承鏈上的末鏈,不能再有子類別

final class End{
}
class Test  extends End{
}
登入後複製
运行结果:报错
PHP Fatal error: Class Test may not inherit from final class (End) in /usercode/file.php on line 7
登入後複製

final方法,限制方法不能被子類別重寫

<?php
class  AmParent{
    final public function end_func(){
        echo &#39;我是final方法&#39;;
    }
}
class AmChild extends AmParent{
     public function end_func(){
        echo &#39;我是子类,我想重写final方法,可是报错了&#39;;
    }
}
登入後複製
运行结果:报错
PHP Fatal error: Cannot override final method AmParentt::end_func() in /usercode/file.php on line 11
登入後複製

類抽象類,abstractstract5tractstract (類別常數,靜態屬性,靜態方法,非靜態屬性,非靜態方法) 多出一樣東西-抽象方法,要求非抽象子類別必須實作抽象方法。 
抽像法: 沒有{},稱為 只有方法的宣告。可以有參數。

abstract public function abstract_func($arg1,$arg2)
登入後複製
//不能实例化对象
<?php
abstract class AmParent{
    abstract public function abstract_func($arg1,$arg2);
}
$amParent=new AmParent;
登入後複製
运行结果:
PHP Fatal error: Cannot instantiate abstract class AmParent in /usercode/file.php on line 5
登入後複製

只能被繼承 

被繼承的兩種情況: 
1.子類別是抽象類別 
2.子類別不是抽象類,必須將父類別的抽象方法全部實作(加上方法體{})。

<?php
abstract class AmParent{
    abstract public function abstract_func($arg1,$arg2);
}
class AmChild extends AmParent{
}
登入後複製
运行结果,报错:
PHP Fatal error: Class AmChild contains 1 abstract method and must therefore be 
declared abstract or implement the remaining methods (AmParent::abstract_func) in /usercode/file.php on line 6
登入後複製

不報錯的情況: 

1加上abstract成為抽象類別

<?php
abstract class AmParent{
    abstract public function abstract_func($arg1,$arg2);
}
abstract class AmChild extends AmParent{
}
登入後複製

2實作抽象方法

<?php
abstract class AmParent{
    abstract public function abstract_func($arg1,$arg2);
}
 class AmChild extends AmParent{
     public function abstract_func($arg1,$arg2){
        echo $arg1.$arg2;
         }
}
$amChild=new AmChild;
$amChild->abstract_func( &#39;have implemented &#39;,&#39; abstract_func &#39;);
登入後複製
运行结果,报错:
have implemented abstract_func
登入後複製

使用意義 

抽象類,規定其非抽象子類都必須存在的方法,同名但方法可以不同。

<?php
abstract class Goods{
    abstract public function sayName();
}
 class Books extends  Goods{
     public function sayName(){
         echo &#39;我是一本书的名字<br/>&#39;;
     }
}
 class Mobiles extends  Goods{
     public function sayName(){
         echo &#39;我是一部手机的名字<br/>&#39;;
     }
}
$book1=new Books;
$book1->sayName();
$mobile1=new Mobiles;
$mobile1->sayName();
登入後複製
运行结果:
我是一本书的名字
我是一部手机的名字
登入後複製

介面結構: 

用來限制一個類別(物件)應該具備的公共方法(介面方法)!

<?php
    interface iGoods{
        const PAI=3.14;
        public function sayName();
        public function sayPrice();
    }
登入後複製

介面內只能包含公共的抽象方法(不完整的方法)和常數! 

實作implements 
實作介面結構的類,就包含了介面中定義的抽象方法。 
兩個選擇,1定義成抽象類,2實作介面方法!

//1定义成抽象类
abstract class Books implements iGoods{
    abstract  public function sayName();
    abstract  public function sayPrice();
}
登入後複製
//2实现接口方法
 class Books implements iGoods{
     public function sayName(){
         echo &#39;我实现了接口方法&#39;;
     }
     public function sayPrice(){
         echo &#39;我实现了接口方法&#39;;
     }
}
登入後複製

比較抽象類別與介面的區別: 

1抽象類別與普通類別之間是繼承關係 
普通類別繼承抽象類別了,第一可以得到抽象類別中已有的常規成員, 
第二才需要實現抽象方法(不一定是public的) 
2.介面與普通類別之間是實作關係! 
普通類別實作了介面,只能將其沒有實現的公共方法實作! 
3.介面只用來定義public方法和常數!而抽象類,什麼都可以有! 
4.介面多實作。一個類,可以同時實作多個介面

<?php
interface iA{
        const PAI=3.14;
    public function sayA();
}
interface iB{
    public function sayB();
}
class C implements iA,iB{
    public function sayA(){
    }
    public function sayB(){
    }
}
登入後複製

tip: 

介面不是類,介面就是獨立的一種結構,用來限制類別的結構!

//用class_exists(@param string),判断类是否存在
var_dump(class_exists(&#39;C&#39;));
var_dump(class_exists(&#39;iA&#39;));
登入後複製
运行结果:
bool(true)
bool(false)
登入後複製
裡面全是沒有方法體也沒有abstract關鍵字的public方法與常數。


 以上就是php物件導向語法5 final類,抽象類,介面結構(不是類別)的內容,更多相關內容請關注PHP中文網(www.php.cn)!



本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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

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

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

我後悔之前不知道的 7 個 PHP 函數 我後悔之前不知道的 7 個 PHP 函數 Nov 13, 2024 am 09:42 AM

如果您是經驗豐富的PHP 開發人員,您可能會感覺您已經在那裡並且已經完成了。操作

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

See all articles