PHP中抽象類別和介面的使用方法(代碼)

來源:互聯網
上載者:User
這篇文章給大家介紹的文章內容是關於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) {       }   }   ?>
相關推薦:
  1. php中實現觀察者模式的代碼

  2. php分頁和正則驗證的代碼實現

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.