[PHP] 抽象类与接口
抽象类是一种特殊的类, 接口是一种特殊的抽象类, 而多态就要使用到抽象类或是接口
抽象类
什么是抽象方法?
定义:在一个类中,没有方法体的方法就是抽象方法(就是一个方法没有使用{}而直接使用分号结束)
abstract function test(); //抽象方法 function test(){ //有方法体,但方法体为空的 }
如果一个方法是抽象方法,就必须使用abstract修饰为什么要使用抽象方法?
什么是抽象类?
-
如果一个类中,有一个方法是抽象的则这个类就是抽象类
-
如果一个类是抽象类,则这个类必须要使用abstract修饰
-
抽象类是一种特殊的类,就是因为一个类中有抽象方法,其他不变。也可以在抽象类中声明成员属性,常量,非抽象的方法。
- 抽象类不能实例化对象(不能通过抽象类去创建一个抽象类的对象)
//普通的类class 类名{ }// 抽象类abstract class 类名 { } abstract class Demo{ var a; abstract function fun1(); function fun2() { }}
抽象类的作用:
-
要想使用抽象类,就必须使用一个类去继承抽象类,而且要想使用这个子类,也就是让子类可以创建对象,子类就必须不能再是抽象类,子类可以重写父类的方法(给抽象方法加上方法体)。抽象方法中的方法没有方法体, 子类必须实现这个方法 (父类中没写具体的实现, 但子类必须有这个方法名)
-
列用抽象类,可以定义一些规范,让子类按这些规范去实现自己的功能
接口
-
接口是一种特殊的抽象类, 抽象类又是一种特殊的类
-
接口和抽象类是一样的作用
-
抽象类提供了具体实现的标准,而接口则是纯粹的模版。接口只定义功能,而不包含实现的内容。接口用关键字 interface 来声明。
-
因为PHP是单继承的, 如果使用抽象类,子类实现完抽象类就不能再去继承其它的类了。如果既想实现一些规范, 又想继承一个其他类。就要使用接口
声明方式
interface 接口名{ const 常量名 = 常量值; //接口中的属性必须为常量 function 函数名();}echo 接口名::常量名; interface Demo{ const HOST = "localhost"; function fun();}echoDemo::HOST; //输出为localhost
接口和抽象类的对比
-
作用相同,都不能创建对象, 都需要子类去实现
-
接口的声明和抽象类不一样
-
接口被实现的方式不一样
-
接口中的所有方法必须是抽象方法,只能声明抽象方法(而且不需要使用abstract修饰)
-
接口中的成员属性,只能声明常量,不能声明变量
-
接口中的成员访问权限 都必须是public, 抽象类中最低的权限protected
-
使用一个类去实现接口, 不是使用extends关键字, 而是使用implements这个词
- 如果子类是重写父类接口中抽象方法,则使用 implements : 类–接口, 抽象类—接口 implements 。接口—接口 extends
使用 implements 的两个目的
1. 可以实现多个接口 ,而 extends 词只能继承一个父类
2. extends 和 implements 两个可以同时使用
注意:
- 可以使用抽象类去实现接口中的部分方法
-
如果想让子类可以创建对象,则必须实现接口中的全部抽象方法
-
可以定义一个接口去继承另一个接口
-
一个类可以去实现多个接口(按多个规范去开发子类), 使用逗号分隔多个接口名称
-
一个类可以在继承父类的同时,去实现一个或多个接口(先继承,再实现)
多态
多态是面向对象的三大特性之一,是面向对象设计的重要特性。它展现了动态绑定(dynamic binding)的功能,也称为同名异式”(Polymorphism)。多态的功能可让软件在开发和维护时,达到充分的延伸性(extension)。事实上,多态最直接的定义就是让具有继承关系的不同类对象,可以对相同名称的成员函数调用,产生不同的反应效果。
以下是关于使用多态的一个 Demo :
<html> <head> <metacharset="utf-8"> head> </html><?php interface USB //声明一个USB接口 { function mount(); function work(); function unMount(); } class UPan implements USB //UPan实现了USB的功能 { function mount() { echo "U盘挂载<br>"; } function work() { echo "U盘工作<br>"; } function unMount() { echo "U盘卸载成功<br>"; } } class Wire implements USB //数据线实现了USB的功能 { function mount() { echo "数据线挂载<br>"; } function work() { echo "开始传输数据<br>"; } function unMount() { echo "数据线卸载成功<br>"; } } class PC //声明一个PC类 { function USB($usb) { $usb->mount(); $usb->work(); $usb->unMount(); } } class Person //声明一个Person类 { function usePC() { $pc = new PC; $upan = new UPan; $wire = new Wire; $pc->USB($upan); $pc->USB($wire); } } $p1 = new Person; //实例化一个Person类 $p1->usePC();

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。
