首頁  >  文章  >  後端開發  >  php類別和函數的區別

php類別和函數的區別

(*-*)浩
(*-*)浩原創
2019-09-23 16:04:383786瀏覽

物件導向程式設計(OOP)引入了相當多的特性,使程式設計變得更加複雜,封裝、繼承、多態是OOP的三要素,這些是過程式中的函數所沒有的。

php類別和函數的區別

具體體現在:

#1.封裝: class/interface/public/protected/private

# 2.繼承: extends/implements(推薦學習:PHP程式設計從入門到精通

3.多態: 方法重寫/方法重載

新增的class和interface加入了新的變數作用域,即類別和介面裡程式碼區塊是函數所沒有的作用域。

在這個作用域裡,可以定義變數和函數這些類別和介面的成員,並且支援使用public/protected/private關鍵字對這些成員進行存取控制.例如public表示允許外部存取,protected表示允許類別及其子類別存取,private表示只允許所在類別內部存取。

類別要有關鍵字class聲明,類別有屬性和方法構成,可以實例化出對象,類別可以被繼承,一般類別是物件導向程式設計時用到;函數沒有屬性,一般用在面向過程,為解決某一特定問題而寫的。

而且OOP還引入了方法重寫和方法重載這些多態特性,即:

方法重寫:參數列表相同,方法體不同.

方法重載:參數列表不同,方法體不同.

方法重寫依賴繼承,是子類別的方法覆蓋父類別的方法,要求方法名稱和參數列表相同.

方法重載不依賴繼承,是同一個類別中的兩個或兩個以上的同名方法,參數列表不同.

需要注意的是繼承並重寫的方法只能維持或放大存取權限,不能縮小.

例如父類別protected方法在子類別重載為public是可行的.

在PHP中,因為不允許存在多個同名方法,所以不支援C /Java那樣的方法重載.

但PHP提供了魔術方法(__call,__callStatic)用於間接實作方法重載.

# PHP中方法重寫並不要求參數相同.

PHP不支援多重繼承(繼承多個父類別),但可以實現多個介面,也可以用trait特性間接支援多重繼承.

有些人認為繼承會增加子類別和父類別的耦合,所以反對繼承,甚至有些新的程式語言如Go等,直接不支援繼承,而是使用組合來取代繼承.例如依賴注入,本質上也是一種組合的思想,用於實現解耦.PHP中可以final修飾一個類別,禁止這個類別被繼承.

以上是php類別和函數的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

相關文章

看更多