PHP 物件導向

2021-10-04 19:55:37 字數 1940 閱讀 3565

為啥要物件導向?

我記得之前物件導向是 抽象、封裝、繼承、多型。後面 把 抽象剔除了。

1. 抽象: 	個人覺得抽象是一種思維的方式,抽象就好像整合,把一些東西整合在一起,再給它取個名字,物件導向的最重要的乙個步。

3. 多型: 乙個事務的多種的狀態,如水:熱水、溫水、涼水、河水、海水、髒水,都是水,水在不同的環境下呈現出了不同的狀態。對於**而言

乙個abstract類+子類就可呈現出不同的狀態,只需新增子類。

物件導向其實是**於生活中。水 == 液體(鐵水、銀水),本是鐵或銀,怎麼叫鐵水銀水呢?

鐵融化掉成了液體,本質上還是鐵,但是有了液體的特性,所以帶水---鐵水。

鐵水 = 鐵的本質 + 液體的特性。

其實生活中有很多很多案例。舉個例子,就拿我們常見的樹來說。

農夫買了兩株觀賞性的小樹苗,栽倒門前。然後又買了100株茶樹,種植到山上,期望過幾年有茶籽撿。

分析—>觀賞性的小樹苗、茶樹苗。

從名稱即可得出 觀賞性、樹、茶、苗(幼小);

觀賞性 -- 是一種特性

樹 -- 植物種類的一種 類別

茶 -- 子類

苗 -- 表現形式

根是樹,其它的都是繼承與於樹

abatract 抽象類、inte***ce 介面類
**實現
1. extends 繼承類  

2. implements 實現介面

3. trait **復用

4. final 總有東西是私密的

乙個呼叫,可以根據事務的不同而不同。
單一職責原則srp(single responsibility principle)

是指乙個類的功能要單一,不能包羅永珍。如同乙個人一樣,分配的工作不能太多,否則一天到晚雖然忙忙碌碌的,但效率卻高不起來。
開放封閉原則ocp(open-close principle)

乙個模組在擴充套件性方面應該是開放的而在更改性方面應該是封閉的。比如:乙個網路模組,原來只服務端功能,而現在要加入客戶端功能,那麼應當在不用修改服務端功能**的前提下,就能夠增加客戶端功能的實現**,這要求在設計之初,就應當將服務端和客戶端分開,公共部分抽象出來`。
裡式替換原則lsp(the liskov substitution principle lsp)

子類應當可以替換父類並出現在父類能夠出現的任何地方。比如:公司搞年度晚會,所有員工可以參加**,那麼不管是老員工還是新員工,也不管是總部員工還是外派員工,都應當可以參加**,否則這公司就不和諧了。
依賴倒置原則dip(the dependency inversion principle dip)

具體依賴抽象,上層依賴下層。假設b是較a低的模組,但b需要使用到a的功能,這個時候,b不應當直接使用a中的具體類: 而應當由b定義乙個抽象介面,並由a來實現這個抽象介面,b只使用這個抽象介面:這樣就達到了依賴倒置的目的,b也解除了對a的依賴,反過來是a依賴於b定義的抽象介面。通過上層模組難以避免依賴下層模組,假如b也直接依賴a的實現,那麼就可能造成迴圈依賴。乙個常見的問題就是編譯a模組時需要直接包含到b模組的cpp檔案,而編譯b時同樣要直接包含到a的cpp檔案。
介面分離原則isp(the inte***ce segregation principle isp)

模組間要通過抽象介面隔離開,而不是通過具體的類強耦合起來

PHP物件導向

1 什麼是物件導向 起初,物件導向 是專指在程式設計中採用封裝 繼承 抽象等設計方法。可是,這個定義顯然不能再適合現在情況。物件導向的思想已經涉及到軟體開發的各個方面。如 物件導向的分析 ooa,object oriented analysis 物件導向的設計 ood,object oriented...

php物件導向

smarty自定義函式 作用 用於在模板被執行時為模板變數賦值 函式名稱 assign 引數 var 宣告變數名稱 字串 value 給該變數賦值 字串 tpl assign title this is title 實現自定義函式有兩種 1.註冊自定義函式 3.版本不支援 tpl register ...

php物件導向

一 寫出php的public protected private三種訪問控制模式的區別 public 公有,任何地方都可以訪問 protected 繼承,只能在本類或子類中訪問,在其他地方不允許訪問 private 私有,只能在本類中訪問,在其他地方不允許訪問 二 請用單態設計模式方法設計類滿足要求...