PHP 5也支持接口的概念,并為之引入了interface和implements關鍵字.和Java一樣,PHP 5使用接口也實現類似于“多重繼承”的效果.
PHP5接口語法如下:
聲明一個類的時候我們使用的關鍵字是”class”,而接口一種特殊的類,使用的關鍵字是“interface”;
類的定義:class 類名{ … },接口的聲明:interface 接口名{ …}
具體PHP5抽象類的代碼如下:
實例代碼如下:
- abstract class AbstractClass {
- abstract public function test();
- }
- class ImplementedClass extends AbstractClass {
- public function test() {
- echo "ImplementedClass::test() called. ";
- }
- }
- $o = new ImplementedClass;
- $o->test();
實例代碼如下:
- interface displayable {
- function display();
- }
- interface printable {
- function doprint();
- }
- class foo implements displayable,printable {
- function display() {
- // code
- } function doprint() {
- // code
- }
- }
抽象類和PHP5接口的引入使PHP成了一個完全面向對象的語
//定義一個接口使用interface關鍵字,“One”為接口名稱
實例代碼如下:
- interface One
- {
- //定義一個常量
- const constant = 'constant value';
- //定義了一個抽象方法”fun1”
- public function fun1();
- //定義了抽象方法”fun2”
- public function fun2();
- }
上例中定義了一個接口”one”,里面聲明了兩個抽象方法“fun1”和”fun2”,因為接口里面所有的方法都是抽象方法,所以在聲明抽象方法的時候就不用像抽象類那樣使用”abstract”這個關鍵字了,默認的已經加上這個關鍵字,另外在接口里邊的”public”這個訪問權限也可以去掉,因為默認就是public的,因為接口里所有成員都要是公有的,所在對于接口里面的成員我們就不能使用“private”的和”protected”的權限了,都要用public或是默認的.另外在接口里面我們也聲明了一個常量“constant“, 因為在接口里面不能用變量成員,所以我們要使用const這個關鍵字聲明.
因為接口是一種特殊的抽象類,里面所有的方法都是抽象方法,所以接口也不能產生實例對象; 它也做為一種規范,所有抽象方法需要子類去實現.
我們可以使用”extends”關鍵字讓一個接口去繼承另一個接口;
實例代碼如下:
- //使用”extends”繼承另外一個接口
- interface Two extends One
- {
- function fun3();
- function fun4();
- }
而我們定義一接口的子類去實現接口中全部抽象方法使用的關鍵字是”implements”,而不是我們前面所說的”extends”;
//使用“implements”這個關鍵字去實現接口中的抽象方法
實例代碼如下:
- class Three implements One
- {
- function fun1()
- {
- … …
- }
- function fun2()
- {
- … …
- }
- }
- //實現了全部方法,我們去可以使用子類去實例化對象了
實例代碼如下:
- $three=new Three();
我們也可以使用抽象類,去實現接口中的部分抽象方法,但要想實例化對象,這個抽象類還要有子類把它所有的抽象方法都實現才行;
在前面我們說過,PHP是單繼承的,一個類只能有一父類,但是一個類可以實現多個接口,就相當于一個類要遵守多個規范,就像我們不僅要遵守國家的法律,如果是在學校的話,還要遵守學校的校規一樣;
實例代碼如下:
- //使用implements實現多個接口
- class Four implemtns 接口一,接口二,……
- {
- //必須把所有接口中的方法都要實現才可以實例化對象.
- }
PHP中不僅一個類可以實現多個接口,也可以在繼承一個類的同時實現多個接口,一定要先繼承類再去實現接口;
實例代碼如下:
- //使用extends繼承一個類,使用implements實現多個接口
- class Four extends 類名一 implemtns 接口一,接口二,……
- {
- //所有接口中的方法都要實現才可以實例化對象
- ………
- }
講了這么多最后看看一個實例
VideoCard.php 接口文件(顯卡的功能接口定義)
實例代碼如下:
- <?php
- interface VideoCardInter{
- function Display();
- function getName();
- }
- ?>
Dmeng.php 實現接口(帝盟的廠家實現了這些接口,怎么實現的,主板廠家不用管)
實例代碼如下:
- <?php
- include_once("VideoCard.php");
- class Dmeng implements VideoCardInter {
- function Display(){
- echo "Display";
- }
- function getName(){
- return "Dmeng VideoCard";
- }
- }
- ?>
Mainboard.php 應用接口(把顯卡插到主板上,主板只要用這些接口就行了,也可以不用)
實例代碼如下:
- <?php
- include_once("VideoCard.php");
- include_once("Dmeng.php");
- class Mainboard{
- var $vc;
- function run(VideoCardInter $vc){ //定義VideoCardInter接口類型參數,這時并不知道是誰來實現.
- $this->vc=$vc;
- $this->vc->Display();
- echo "主板運行!";
- }
- }
- $conputer=new Mainboard();
- $conputer->run(new Dmeng);
- //用的時候把實現接口類的名稱寫進來,(現在是帝盟的顯卡,也可以換成別的場家的,只要他們都實現了接口)
- ?>
上面是轉自的,然后自己試著寫了點東西:把自己的思想總結一下
這里我想是分成4個方面
1,靜態鏈接數據庫類(基本的鏈接數據庫,查詢記錄數,返回結果集等等)
2,每個模塊的接口(例如新聞類接口 NewsInterface)
3,實現接口的類(新聞實現類 NewsInterfaceImpl 這里面寫一些頁面中用到的方法,然后new這個對象 調用這里么的方法)
4,模塊類(新聞類 News)
新聞熱點
疑難解答