php 物件導向及設計模式

2021-09-24 03:32:56 字數 3162 閱讀 4295

物件 (歸納,總結)抽象成為類

類 (具體化實現)例項化成為物件

屬性中的變數可以初始化,但是初始化的值必須是常數,這裡的常數是指php指令碼在編譯階段就可以得到其值,而不依賴於執行的資訊才能求值。如可用常數5,而不能用7-2獲得。

封裝

盡可能隱蔽物件的內部細節,對外形成乙個邊界,只保留有限的對外介面,使之與外部發生聯絡。

放在函式內部修飾變數,在函式執行完後,變數值仍然儲存

修飾屬性或方法,可以通過類名訪問,如果是修飾的是類的屬性,保留值

放在類的方法裡修飾變數

修飾在全域性作用域的變數

呼叫方式

->(物件運算子)訪問非靜態屬性

當乙個方法在類內部被呼叫,可用偽變數$thisconststatic修飾的,內部外部都可以用類名::屬性,類名::方法名,內部,self::屬性名self::方法名

當呼叫當前環境下未定義或不可見的類屬性或方法時,過載方法會被呼叫。

屬性過載

__get()在讀取不可訪問的屬性時被自動呼叫

__set()在給不可訪問的屬性賦值時被自動呼叫

__isset()當對不可訪問的屬性呼叫isset()empty()時被自動呼叫

__uset()當於不可訪問的屬性呼叫unset()時被自動呼叫

類過載__call()在物件中呼叫乙個不可訪問的方法時被自動呼叫

__callstatic()在靜態上下文中呼叫乙個不可訪問的方法時,被自動呼叫

__tostring()乙個類被當成字串時被自動呼叫

__invoke()當嘗試以呼叫函式的方式呼叫乙個物件時被自動呼叫 繼承

多型

介面的多種不同的實現方式即為多型。同一操作,作用於不同的物件,可以有不同的解釋,產生不同的執行結果。

類的屬性和方法必須新增訪問修飾符(privateprotectedpublic

abstract以及final必須宣告在訪問修飾符之前

static必須在訪問修飾符之後

實現關鍵字:implements乙個類可以實現多個介面

繼承關鍵字:extends

類實現介面:class a implements ainter

完全寫法:class a extends b implements ainter,binter

介面繼承介面:ainter extends binter

條件約束

用於確定乙個 php 變數是否屬於某一類 class 的例項

也可用來確定乙個變數是不是繼承自某一父類的子類的例項

檢查乙個物件是否不是某個類的例項

類的自動載入

命名空間

用來解決在編寫類庫或應用程式時建立可重用的**如類或函式時碰到的兩類問題:

使用者編寫的**與php內部的類/函式/常量或第三方類/函式/常量之間的名字衝突。

為很長的識別符號名稱(通常是為了緩解第一類問題而定義的)建立乙個別名(或簡短)的名稱,提高源**的可讀性。

檢視官網更多關於命名空間的資訊

php物件導向高階特性

splstack類通過使用乙個雙向鍊錶來提供棧的主要功能。

splqueue類通過使用乙個雙向鍊錶來提供佇列的主要功能。

splheap類提供堆的主要功能。

arrayiterator 類 這個迭代器允許在遍歷陣列和物件時刪除和更新值與鍵。

arrayobject 允許物件作為陣列工作。

檢視官網更多類和介面

工廠模式:工廠方法或者類生成物件,而不是在**中直接new單例模式:使某個類的物件僅允許建立乙個

註冊樹模式:全域性共享和交換物件

介面卡模式:可以將截然不同的函式介面封裝成統一的介面

策略模式:將一組特定的行為和演算法封裝成類,以適應某種特定的上下文環境。--->可以實現ioc,依賴倒置,控制反轉

資料物件對映模式:將物件和資料儲存對映起來,對乙個物件的操作會對映為對資料儲存的操作。

觀察者模式:當乙個物件狀態發生改變時,依賴它的物件全部會收到通知,並自動更新---->實現了低耦合,非侵入式的通知和更新機制

原型模式:與工廠模式類似,都是用來建立物件,與工廠模式的實現不同,原型模式是先建立好乙個原型物件,然後通過clone原型物件來建立新的物件。這樣就免去了建立物件時重複的初始化操作,原型模式適用於大物件的建立,建立乙個大物件需要很大的開銷,如果每次new就會開銷很大,原型模式僅需要記憶體拷貝即可。

裝飾器模式:可以動態的新增修改類的功能,乙個類提供乙個功能,如果需要修改並新增額外的功能,傳統的程式設計模式,需要寫乙個子類繼承它,並重新實現它的方法,使用裝飾器模式,僅需要在執行時新增乙個裝飾器物件,即可實現,可以實現最大的靈活性。

迭代器模式:在不需要了解內部實現的前提下,遍歷乙個聚合物件的內部元素,相比較傳統的程式設計模式,迭代器模式可以隱藏遍歷元素的所需操作。

單一職責:乙個類,只需要做好一件事

開放封閉:應該是可擴充套件的,而不可修改的

依賴倒置:乙個類,不應該強依賴於另外乙個類,每個類對於另外乙個類,都是可替換的

配置化:盡可能的使用配置,而不是硬編碼

面向介面程式設計:只需要關心介面,不需要關心實現

PHP常用設計模式及物件導向設計 筆記和學習

建造者模式 乙個導演類,傳入乙個 不同builder類 具體怎麼製造由此決定 來建立一輛車 定義build介面 不同車輛build類,根據不同來建造 和工廠差不多,要稍複雜一點 class director class engineer class whell class door inte ce ...

PHP物件導向設計模式和設計原則

一 設計模式 1.單例模式 目的 讓乙個類只能生成乙個物件 步驟 將建構函式變成私有的 在類裡面做乙個靜態成員函式造物件 在方法裡加限制條件 單例模式 class ren public static function duixiang return self r 返回 r中的唯一的例項化物件 r r...

物件導向 設計模式

提到設計模式,不得不感謝gof gang of four,四人組 他們1995年出版的 設計模式 一書,第一次將設計模式提公升到理論高度,並將之規範化。書中一共總結了23種基本的設計模式。而這23中設計模式幾乎涵蓋了物件導向設計過程中所有問題的解決方案。書中提到的23種設計模式分別是 1.單例模式 ...