這篇文章給大家介紹的文章內容是關於PHP中抽象類別和介面的使用方法(代碼),有很好的參考價值,希望可以協助到有需要的朋友。
<?php /*** ====筆記部分==== 介面的具體文法: 0:以人類為, class Human 是人的草圖 而介面 是零件 可以用多種零件組合出一種新特種來. 1: 如上,介面本身即是抽象的,內部聲明的方法 預設也是抽象的. 不用加 abstract 2: 一個類可以一次性實現多個介面. 文法用 implements 實現 (把我這幾個功能實現了) class ClassName implements interface1,interface2,interface3 { } 然後再把介面的功能給實現. 3: 介面也可以繼承, 用extends 4:介面是一堆方法的說明,不能加屬性 5:介面就是供組裝成類用的,封閉起來沒有意義,因此方法只能是public ***/ interface animal { protected function eat(); } interface monkey extends animal { public function run(); public function cry(); } interface wisdom { public function think(); } interface bird extends animal{ public function fly(); } /* // 下面有誤,monkey繼承的aniaml介面,因此必須要把eat()實現 class Human implements monkey,wisdom { public function run() { echo '走'; } public function cry() { echo '哭'; } public function think() { echo '思考'; } } */ class Human implements monkey,wisdom { public function eat() { echo '吃'; } public function run() { echo '走'; } public function cry() { echo '哭'; } public function think() { echo '思考'; } } ?> <?php //04.php /*** ====筆記部分==== 物件導向的一個觀點: 做的越多,越容易犯錯 抽象類別{就定義類模板}--具體子類實現{china,japan,english} 介面: ***/ // 抽象的資料庫類 /* 創業做網站 到底用什麼資料庫? mysql, oracle,sqlserver,postgresql? 這樣:先開發網站,運行再說. 先弄個mysql開發著,正式上線了再資料庫也不遲 引來問題: 換資料庫,會不會以前的代碼又得重寫? 答:不必,用抽象類別 開發人員,開發時,就以db抽象類別來開發. */ abstract class db { public abstract function connect($h,$u,$p); public abstract function query($sql); public abstract function close(); } /* // 下面這個代碼有誤 // 因為子類實現時, connect和抽象類別的connect參數不一致 class mysql extends db { public function connect($h,$h) { return true; } public function query($sql,$conn) { } public function close() { } } */ /* 下面這個mysql類,嚴格實現了db抽象類別 試想: 不管上線時,真正用什麼資料庫 我只需要再寫一份如下類 class oracle extends db { } class mssql extends db { } class postsql extends db { } 商務邏輯層不用改? 為什麼不用改? 因為都實現的db抽象類別. 我開發時,調用方法不清楚的地方,我就可以參考db抽象類別. 反正子類都是嚴格實現的抽象類別. */ class mysql extends db { public function connect($h,$h,$u) { return true; } public function query($sql) { } public function close() { } } /* 介面 就更加抽象了 比如一個社交網站, 關於使用者的處理是核心應用. 登陸 退出 寫信 看信 招呼 更換心情 吃飯 罵人 搗亂 示愛 撩騷 這麼多的方法,都是使用者的方法, 自然可以寫一個user類,全封裝起來 但是,分析使用者一次性使不了這麼方法 使用者資訊類:{登陸,寫信,看信,招呼,更換心情,退出} 使用者娛樂類:{登陸,罵人,搗亂,示愛,撩騷,退出} 開發網站前,分析出來這麼多方法, 但是,不能都裝在一個類裡, 分成了2個類,甚至更多. 作用應用邏輯的開發,這麼多的類,這麼多的方法,都暈了. */ interface UserBase { public function login($u,$p); public function logout(); } interface UserMsg { public function wirteMsg($to,$title,$content); public function readMsg($from,$title); } interface UserFun { public function spit($to); public function showLove($to); } /* 作為調用者, 我不需要瞭解你的使用者資訊類,使用者娛樂類, 我就可以知道如何調用這兩個類 因為: 這兩個類 都要實現 上述介面. 通過這個介面,就可以規範開發. */ /* 下面這個類,和介面聲明的參數不一樣,就報錯, 這樣,介面強制統一了類的功能 不管你有幾個類,一個類中有幾個方法 我只知道,方法都是實現的介面的方法. */ class User implements UserBase { public function login($u) { } } ?>
介面文法:
<?php /*** ====筆記部分==== 介面的具體文法: 0:以人類為, class Human 是人的草圖 而介面 是零件 可以用多種零件組合出一種新特種來. 1: 如上,介面本身即是抽象的,內部聲明的方法 預設也是抽象的. 不用加 abstract 2: 一個類可以一次性實現多個介面. 文法用 implements 實現 (把我這幾個功能實現了) class ClassName implements interface1,interface2,interface3 { } 然後再把介面的功能給實現. 3: 介面也可以繼承, 用extends 4:介面是一堆方法的說明,不能加屬性 5:介面就是供組裝成類用的,封閉起來沒有意義,因此方法只能是public ***/ interface animal { protected function eat(); } interface monkey extends animal { public function run(); public function cry(); } interface wisdom { public function think(); } interface bird extends animal{ public function fly(); } /* // 下面有誤,monkey繼承的aniaml介面,因此必須要把eat()實現 class Human implements monkey,wisdom { public function run() { echo '走'; } public function cry() { echo '哭'; } public function think() { echo '思考'; } } */ class Human implements monkey,wisdom { public function eat() { echo '吃'; } public function run() { echo '走'; } public function cry() { echo '哭'; } public function think() { echo '思考'; } } ?> <?php //04.php /*** ====筆記部分==== 物件導向的一個觀點: 做的越多,越容易犯錯 抽象類別{就定義類模板}--具體子類實現{china,japan,english} 介面: ***/ // 抽象的資料庫類 /* 創業做網站 到底用什麼資料庫? mysql, oracle,sqlserver,postgresql? 這樣:先開發網站,運行再說. 先弄個mysql開發著,正式上線了再資料庫也不遲 引來問題: 換資料庫,會不會以前的代碼又得重寫? 答:不必,用抽象類別 開發人員,開發時,就以db抽象類別來開發. */ abstract class db { public abstract function connect($h,$u,$p); public abstract function query($sql); public abstract function close(); } /* // 下面這個代碼有誤 // 因為子類實現時, connect和抽象類別的connect參數不一致 class mysql extends db { public function connect($h,$h) { return true; } public function query($sql,$conn) { } public function close() { } } */ /* 下面這個mysql類,嚴格實現了db抽象類別 試想: 不管上線時,真正用什麼資料庫 我只需要再寫一份如下類 class oracle extends db { } class mssql extends db { } class postsql extends db { } 商務邏輯層不用改? 為什麼不用改? 因為都實現的db抽象類別. 我開發時,調用方法不清楚的地方,我就可以參考db抽象類別. 反正子類都是嚴格實現的抽象類別. */ class mysql extends db { public function connect($h,$h,$u) { return true; } public function query($sql) { } public function close() { } } /* 介面 就更加抽象了 比如一個社交網站, 關於使用者的處理是核心應用. 登陸 退出 寫信 看信 招呼 更換心情 吃飯 罵人 搗亂 示愛 撩騷 這麼多的方法,都是使用者的方法, 自然可以寫一個user類,全封裝起來 但是,分析使用者一次性使不了這麼方法 使用者資訊類:{登陸,寫信,看信,招呼,更換心情,退出} 使用者娛樂類:{登陸,罵人,搗亂,示愛,撩騷,退出} 開發網站前,分析出來這麼多方法, 但是,不能都裝在一個類裡, 分成了2個類,甚至更多. 作用應用邏輯的開發,這麼多的類,這麼多的方法,都暈了. */ interface UserBase { public function login($u,$p); public function logout(); } interface UserMsg { public function wirteMsg($to,$title,$content); public function readMsg($from,$title); } interface UserFun { public function spit($to); public function showLove($to); } /* 作為調用者, 我不需要瞭解你的使用者資訊類,使用者娛樂類, 我就可以知道如何調用這兩個類 因為: 這兩個類 都要實現 上述介面. 通過這個介面,就可以規範開發. */ /* 下面這個類,和介面聲明的參數不一樣,就報錯, 這樣,介面強制統一了類的功能 不管你有幾個類,一個類中有幾個方法 我只知道,方法都是實現的介面的方法. */ class User implements UserBase { public function login($u) { } } ?>
相關推薦:
php中實現觀察者模式的代碼
php分頁和正則驗證的代碼實現