日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

PHP中抽象类与接口的应用场景

發(fā)布時(shí)間:2024/4/15 php 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP中抽象类与接口的应用场景 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
<?php /*** ====筆記部分==== 接口的具體語(yǔ)法: 0:以人類為, class Human 是人的草圖 而接口 是零件 可以用多種零件組合出一種新特種來(lái). 1: 如上,接口本身即是抽象的,內(nèi)部聲明的方法 默認(rèn)也是抽象的. 不用加 abstract 2: 一個(gè)類可以一次性實(shí)現(xiàn)多個(gè)接口. 語(yǔ)法用 implements 實(shí)現(xiàn) (把我這幾個(gè)功能實(shí)現(xiàn)了) class ClassName implements interface1,interface2,interface3 { } 然后再把接口的功能給實(shí)現(xiàn). 3: 接口也可以繼承, 用extends 4:接口是一堆方法的說(shuō)明,不能加屬性 5:接口就是供組裝成類用的,封閉起來(lái)沒(méi)有意義,因此方法只能是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()實(shí)現(xiàn) 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 /*** ====筆記部分==== 面向?qū)ο蟮囊粋€(gè)觀點(diǎn): 做的越多,越容易犯錯(cuò) 抽象類{就定義類模板}--具體子類實(shí)現(xiàn){china,japan,english} 接口: ***/ // 抽象的數(shù)據(jù)庫(kù)類 /* 創(chuàng)業(yè)做網(wǎng)站 到底用什么數(shù)據(jù)庫(kù)? mysql, oracle,sqlserver,postgresql? 這樣:先開(kāi)發(fā)網(wǎng)站,運(yùn)行再說(shuō). 先弄個(gè)mysql開(kāi)發(fā)著,正式上線了再數(shù)據(jù)庫(kù)也不遲 引來(lái)問(wèn)題: 換數(shù)據(jù)庫(kù),會(huì)不會(huì)以前的代碼又得重寫(xiě)? 答:不必,用抽象類 開(kāi)發(fā)者,開(kāi)發(fā)時(shí),就以db抽象類來(lái)開(kāi)發(fā). */ abstract class db { public abstract function connect($h,$u,$p); public abstract function query($sql); public abstract function close(); } /* // 下面這個(gè)代碼有誤 // 因?yàn)樽宇悓?shí)現(xiàn)時(shí), connect和抽象類的connect參數(shù)不一致 class mysql extends db { public function connect($h,$h) { return true; } public function query($sql,$conn) { } public function close() { } } */ /* 下面這個(gè)mysql類,嚴(yán)格實(shí)現(xiàn)了db抽象類 試想: 不管上線時(shí),真正用什么數(shù)據(jù)庫(kù) 我只需要再寫(xiě)一份如下類 class oracle extends db { } class mssql extends db { } class postsql extends db { } 業(yè)務(wù)邏輯層不用改? 為什么不用改? 因?yàn)槎紝?shí)現(xiàn)的db抽象類. 我開(kāi)發(fā)時(shí),調(diào)用方法不清楚的地方,我就可以參考db抽象類. 反正子類都是嚴(yán)格實(shí)現(xiàn)的抽象類. */ class mysql extends db { public function connect($h,$h,$u) { return true; } public function query($sql) { } public function close() { } } /* 接口 就更加抽象了 比如一個(gè)社交網(wǎng)站, 關(guān)于用戶的處理是核心應(yīng)用. 登陸 退出 寫(xiě)信 看信 招呼 更換心情 吃飯 罵人 搗亂 示愛(ài) 撩騷 這么多的方法,都是用戶的方法, 自然可以寫(xiě)一個(gè)user類,全包裝起來(lái) 但是,分析用戶一次性使不了這么方法 用戶信息類:{登陸,寫(xiě)信,看信,招呼,更換心情,退出} 用戶娛樂(lè)類:{登陸,罵人,搗亂,示愛(ài),撩騷,退出} 開(kāi)發(fā)網(wǎng)站前,分析出來(lái)這么多方法, 但是,不能都裝在一個(gè)類里, 分成了2個(gè)類,甚至更多. 作用應(yīng)用邏輯的開(kāi)發(fā),這么多的類,這么多的方法,都暈了. */ 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); } /* 作為調(diào)用者, 我不需要了解你的用戶信息類,用戶娛樂(lè)類, 我就可以知道如何調(diào)用這兩個(gè)類 因?yàn)? 這兩個(gè)類 都要實(shí)現(xiàn) 上述接口. 通過(guò)這個(gè)接口,就可以規(guī)范開(kāi)發(fā). */ /* 下面這個(gè)類,和接口聲明的參數(shù)不一樣,就報(bào)錯(cuò), 這樣,接口強(qiáng)制統(tǒng)一了類的功能 不管你有幾個(gè)類,一個(gè)類中有幾個(gè)方法 我只知道,方法都是實(shí)現(xiàn)的接口的方法. */ class User implements UserBase { public function login($u) { } } ?>

  轉(zhuǎn):https://blog.csdn.net/hanliuxinming/article/details/20879965

  • <?php???
  • /***??
  • ====筆記部分====??
  • 接口的具體語(yǔ)法:??
  • 0:以人類為,?class?Human?是人的草圖??
  • 而接口?是零件??
  • 可以用多種零件組合出一種新特種來(lái).??
  • 1:?如上,接口本身即是抽象的,內(nèi)部聲明的方法?默認(rèn)也是抽象的.??
  • 不用加?abstract??
  • 2:?一個(gè)類可以一次性實(shí)現(xiàn)多個(gè)接口.??
  • 語(yǔ)法用?implements?實(shí)現(xiàn)?(把我這幾個(gè)功能實(shí)現(xiàn)了)??
  • class?ClassName?implements?interface1,interface2,interface3?{??
  • }??
  • 然后再把接口的功能給實(shí)現(xiàn).??
  • 3:?接口也可以繼承,?用extends??
  • 4:接口是一堆方法的說(shuō)明,不能加屬性??
  • 5:接口就是供組裝成類用的,封閉起來(lái)沒(méi)有意義,因此方法只能是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()實(shí)現(xiàn)??
  • 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???
  • /***??
  • ====筆記部分====??
  • 面向?qū)ο蟮囊粋€(gè)觀點(diǎn):??
  • 做的越多,越容易犯錯(cuò)??
  • 抽象類{就定義類模板}--具體子類實(shí)現(xiàn){china,japan,english}??
  • 接口:??
  • ***/???
  • //?抽象的數(shù)據(jù)庫(kù)類???
  • /*??
  • 創(chuàng)業(yè)做網(wǎng)站??
  • 到底用什么數(shù)據(jù)庫(kù)???mysql,?oracle,sqlserver,postgresql???
  • 這樣:先開(kāi)發(fā)網(wǎng)站,運(yùn)行再說(shuō).??
  • 先弄個(gè)mysql開(kāi)發(fā)著,正式上線了再數(shù)據(jù)庫(kù)也不遲??
  • 引來(lái)問(wèn)題:??
  • 換數(shù)據(jù)庫(kù),會(huì)不會(huì)以前的代碼又得重寫(xiě)???
  • 答:不必,用抽象類??
  • 開(kāi)發(fā)者,開(kāi)發(fā)時(shí),就以db抽象類來(lái)開(kāi)發(fā).??
  • */???
  • abstract?class?db?{???
  • ????public?abstract?function?connect($h,$u,$p);???
  • ????public?abstract?function?query($sql);???
  • ????public?abstract?function?close();???
  • }???
  • /*???
  • //?下面這個(gè)代碼有誤??
  • //?因?yàn)樽宇悓?shí)現(xiàn)時(shí),?connect和抽象類的connect參數(shù)不一致??
  • class?mysql?extends?db?{??
  • ????public?function?connect($h,$h)?{??
  • ????????return?true;??
  • ????}??
  • ????public?function?query($sql,$conn)?{??
  • ????}??
  • ????public?function?close()?{??
  • ????}??
  • }??
  • */???
  • /*??
  • 下面這個(gè)mysql類,嚴(yán)格實(shí)現(xiàn)了db抽象類??
  • 試想:?不管上線時(shí),真正用什么數(shù)據(jù)庫(kù)??
  • 我只需要再寫(xiě)一份如下類??
  • class?oracle?extends?db?{??
  • }??
  • class?mssql?extends?db?{??
  • }??
  • class?postsql?extends?db?{??
  • }??
  • 業(yè)務(wù)邏輯層不用改???
  • 為什么不用改???
  • 因?yàn)槎紝?shí)現(xiàn)的db抽象類.??
  • 我開(kāi)發(fā)時(shí),調(diào)用方法不清楚的地方,我就可以參考db抽象類.??
  • 反正子類都是嚴(yán)格實(shí)現(xiàn)的抽象類.??
  • */???
  • class?mysql?extends?db?{???
  • ????public?function?connect($h,$h,$u)?{???
  • ????????return?true;???
  • ????}???
  • ????public?function?query($sql)?{???
  • ????}???
  • ????public?function?close()?{???
  • ????}???
  • }???
  • /*??
  • 接口?就更加抽象了??
  • 比如一個(gè)社交網(wǎng)站,??
  • 關(guān)于用戶的處理是核心應(yīng)用.??
  • 登陸??
  • 退出??
  • 寫(xiě)信??
  • 看信??
  • 招呼??
  • 更換心情??
  • 吃飯??
  • 罵人??
  • 搗亂??
  • 示愛(ài)??
  • 撩騷??
  • 這么多的方法,都是用戶的方法,??
  • 自然可以寫(xiě)一個(gè)user類,全包裝起來(lái)??
  • 但是,分析用戶一次性使不了這么方法??
  • 用戶信息類:{登陸,寫(xiě)信,看信,招呼,更換心情,退出}??
  • 用戶娛樂(lè)類:{登陸,罵人,搗亂,示愛(ài),撩騷,退出}??
  • 開(kāi)發(fā)網(wǎng)站前,分析出來(lái)這么多方法,??
  • 但是,不能都裝在一個(gè)類里,??
  • 分成了2個(gè)類,甚至更多.??
  • 作用應(yīng)用邏輯的開(kāi)發(fā),這么多的類,這么多的方法,都暈了.??
  • */???
  • 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);???
  • }???
  • /*??
  • 作為調(diào)用者,?我不需要了解你的用戶信息類,用戶娛樂(lè)類,??
  • 我就可以知道如何調(diào)用這兩個(gè)類??
  • 因?yàn)??這兩個(gè)類?都要實(shí)現(xiàn)?上述接口.??
  • 通過(guò)這個(gè)接口,就可以規(guī)范開(kāi)發(fā).??
  • */???
  • /*??
  • 下面這個(gè)類,和接口聲明的參數(shù)不一樣,就報(bào)錯(cuò),??
  • 這樣,接口強(qiáng)制統(tǒng)一了類的功能??
  • 不管你有幾個(gè)類,一個(gè)類中有幾個(gè)方法??
  • 我只知道,方法都是實(shí)現(xiàn)的接口的方法.??
  • */???
  • class?User?implements?UserBase?{???
  • ????public?function?login($u)?{???
  • ????}???
  • }???
  • ?>??
  • 轉(zhuǎn)載于:https://www.cnblogs.com/jimz/p/9375261.html

    總結(jié)

    以上是生活随笔為你收集整理的PHP中抽象类与接口的应用场景的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。