萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP5面向對象之接口技術詳解

PHP5面向對象之接口技術詳解

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)

copyright © 萬盛學電腦網 all rights reserved