您好,登錄后才能下訂單哦!
定義:接口就是把不同類的 共同行為
進行了定義,然后在不同的類里面實現不同的功能
或者我們可以理解成它是對事物的一種統一規范,它規定了某個事物必須有哪些行為,比如人這個接口,它就規定了人必須要具備的一些方法,比如吃、喝、拉、撒、走路、說話、眨眼睛、睡覺、思考等,缺少任何一個行為都不是一個正常的人了
作用:
1、規范代碼:定義接口有利于代碼的規范:特別是對于一些大型項目而言,有了統一的接口后,一方面開發人員能有一個清晰的認識,一看接口就知道他們具體要實現哪些業務;同時也能防止由于開發人員隨意命名而導致的命名不清晰和代碼混亂,影響開發效率。
2、提高的代碼的可維護性:比如你要做一個分銷商城程序,其中里面有一個分銷類,主要負責分銷功能,剛開始的時候你可能會把你剛開始想到的一些分銷功能都封裝到這個分銷類里面。可是隨著時間的推移,你之后可能會發現現有的類已經不能夠滿足你的新的需求,然后你就需要重新設計這個類,但是最壞的情況是你會發現此刻這個類好像根本就沒什么用了,但是代碼的其他地方有可能還會引用這個類,如果完全去修改,會導致非常麻煩。但是如果一開始你把它定義成一個接口,把分銷的一些主要功能放在接口里,然后再另外定義一個分銷類時去具體的實現這些接口,然后你只需要用這個接口去引用已經實現這個接口的相關的類就可以了,就算以后要換的話只不過是引用另一個類而已,這樣就可以提高代碼的可維護性和可拓展性。
3、讓代碼更具備高內聚,低耦合的原則
場景:結合它的作用,使用場景基本上如下
1、如果為了保證一個類更具規范性,我們可以為這個類定義一個接口,那么所有繼承這個接口的所有類,都必須要實現接口里定義的方法
2、如果希望提高代碼的可維護性,可重用性和可擴展性,我們也可以考慮它,特別是在參與開發大型項目的時候,一定要先考慮好,哪些接口需要先定義好,這樣就等同于先把規范確定好了,規范確定好了,分工合作的時候,效率才會提升
總結:
1、接口的定義 interface 接口名稱{ }
2、接口里面的方法 是沒有{},也就是說里面的方法是沒有具體的實現部分
3、類實現接口的定義 通過關鍵字implements,比如 class A implements 接口{}
4、類一旦要實現某個接口,就必須要實現接口定義好的所有方法
5、接口不能被實例化
6、通過instanceof 來判斷某個類的實例是不是實現了一個接口,比如A對象實例 instanceof B接口
如果返回true,就表示A對象實例對應的類 是實現了B接口
7、通過extends可以讓一個接口 繼承 另外一個接口
8、當一個類要實現一個子接口時,它不僅要實現子接口里面的方法,同時也要實現父接口的所有方法
每個總結都是通過實踐得來的,下面我們一一來通過具體的代碼來演示上面的總結
1、案例一
實踐目標:
1、接口的定義 interface 接口名稱{ }
2、接口里面的方法 是沒有{},也就是說里面的方法是沒有具體的實現部分
<?php //接口定義 interface Action{ public function eat(); public function walk(); public function sleep(); } ?>
運行結果:是空白的說明沒有報錯
2、案例二
實踐目標:
1、類要實現一個接口的定義 通過關鍵字implements,比如 class A implements 接口{}
2、類一旦要實現某個接口,就必須要實現接口定義好的所有方法
<?php //接口定義 interface Action{ public function eat(); public function walk(); public function sleep(); } //定義實現接口的類 class Monkey implements Action{ //一旦要實現一個接口,就必須要實現接口里面的所有方法 public function eat(){} public function walk(){} public function sleep(){} } $monkey = new Monkey(); ?>
沒有實現接口的方法的運行結果為:
Fatal error: Class Monkey contains 3 abstract methods and must therefore be declared abstract or implement the remaining methods (Action::eat, Action::walk, Action::sleep) in D:\E-class\class-code\classing\index.php on line 11
實現了接口的運行結果為:
空白說明是正確的
3、案例三
實踐目標:
1、接口不能被實例化
<?php //接口定義 interface Action{ public function eat(); public function walk(); public function sleep(); } $action = new Action(); ?>
運行結果為:
Fatal error: Uncaught Error: Cannot instantiate interface Action in D:\E-class\class-code\classing\index.php:9 Stack trace: #0 {main} thrown in D:\E-class\class-code\classing\index.php on line 9
4、案例四
實踐目標:
1、通過instanceof 來判斷某個類的實例是不是實現了一個接口,比如A對象實例 instance of B接口
如果返回true,就表示A對象實例對應的類 是實現了B接口
<?php //接口定義 interface Action{ public function eat(); public function walk(); public function sleep(); } //定義實現接口的類 class Monkey implements Action{ public function eat(){} public function walk(){} public function sleep(){} } $monkey = new Monkey(); print_r( $monkey instanceof Action ); ?>
運行結果為:1
5、案例五
實踐目標:
1、通過extends可以讓一個接口 繼承 另外一個接口
<?php //接口定義 interface Action{ public function eat(); public function walk(); public function sleep(); } //接口繼承 interface HigherAction extends Action{ public function talk(); public function think(); } ?>
6、案例六
實踐目標:
1、當一個類要實現一個子接口時,它不僅要實現子接口里面的方法,同時也要實現父接口的所有方法
<?php //接口定義 interface Action{ public function eat(); public function walk(); public function sleep(); } //接口繼承 interface HigherAction extends Action{ public function talk(); public function think(); } //定義實現子接口的類 class Human implements HigherAction{ public function eat(){} public function talk(){} public function walk(){} public function sleep(){} public function think(){} } $human = new Human(); ?>
當Human類只實現HigherAction的2個方法的時候,運行結果為:
Fatal error: Class Human contains 3 abstract methods and must therefore be declared abstract or implement the remaining methods (HigherAction::think, Action::walk, Action::sleep) in D:\E-class\class-code\classing\index.php on line 14
當Human類實現了HigherAction和Action的所有方法的時候,運行結果為:
空白,說明是正確的
問題:分銷系統想必對很多人來說都不陌生,但是分銷系統也有很多種類,比如常見的不違法有2級分銷,稍微有點違法的就是3級分銷,其實還有更多繁雜的分銷系統,但是不管是哪種分銷系統,他們都有類似的方法,我們希望把這些方法做成一個接口,然后具體怎么實現,就交由2級分銷和3級分銷2個類,怎么做?
思路分析:
1、先想好分銷的公共方法
2、把這些方法封裝到分銷接口中
3、定義2個類,讓這2個類分別去實現這個分銷接口
具體代碼:
<?php //分銷接口定義 interface Commission{ //獲取會員的直接上級 public function getParent($uid); //獲取會員的當期級別 public function getLevel($uid); //獲取會員的累計傭金 public function getTotalCommission($uid); //獲取會員當期可提現傭金 public function getCurrCommission($uid); //獲取會員的累計提現傭金 public function getTotalApplyPrice($uid); } //2級分銷 class TwoLevelCommission implements Commission{ //獲取會員的直接上級 public function getParent($uid){} //獲取會員的當期級別 public function getLevel($uid){} //獲取會員的累計傭金 public function getTotalCommission($uid){} //獲取會員當期可提現傭金 public function getCurrCommission($uid){} //獲取會員的累計提現傭金 public function getTotalApplyPrice($uid){} } //3級分銷 class ThreeLevelCommission implements Commission{ //獲取會員的直接上級 public function getParent($uid){} //獲取會員的當期級別 public function getLevel($uid){} //獲取會員的累計傭金 public function getTotalCommission($uid){} //獲取會員當期可提現傭金 public function getCurrCommission($uid){} //獲取會員的累計提現傭金 public function getTotalApplyPrice($uid){} } ?>
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。