PHP中抽象类与接口的应用场景
生活随笔
收集整理的這篇文章主要介紹了
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)?{??? ????}??? }??? ?>??
轉:https://blog.csdn.net/hanliuxinming/article/details/20879965
轉載于:https://www.cnblogs.com/jimz/p/9375261.html
總結
以上是生活随笔為你收集整理的PHP中抽象类与接口的应用场景的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Salesforce 小知识:大量“子记
- 下一篇: php7 加的新特性积累