PHP5 介面技術
PHP 與大多數物件導向程式語言一樣,不支援多重繼承.也就是說每個類別只能繼承一個父
類別。為了解決這個問題,PHP 引入了接口,接口的思想是指定了一個實現了該接口的類別必須
實現的一系列方法。介面是一種特殊的抽象類別,抽象類別又是一種特殊的類,所以介面也是一
種特殊的類,為什麼說介面是一種特殊的抽象類別呢?如果一個抽象類別裡面的所有的方法都是
抽象方法,那麼我們就換一種宣告方法使用「介面」;也就是說介面裡面所有的方法必須都是
宣告為抽象方法,另外介面裡面不能宣告變量,而且介面裡面所有的成員都是public 權限的。
所以子類別在實作的時候也一定要使用public 權限實限。
宣告一個類別的時候我們使用的關鍵字是“class”,而介面一種特殊的類,使用的關鍵字
是“interface”;
類別的定義: class 類別名稱{ … } ,介面的宣告:interface 介面名稱{ … }
程式碼片段
<?php abstract class Demo{ var $test; abstract function fun1(); abstract function fun2(); function fun3(){ … . } } $demo=new Demo(); //抽象类为能产生实例对象,所以这样做是错的,实例化对象交给子类 class Test extends Demo{ function fun1(){ … } function fun2(){ … } } $test=new Test(); //子类可以实例化对象,因为实现了父类中所有抽象方法 ?>
上例中定義了一個介面“one”,裡面宣告了兩個抽象方法“fun1”和“fun2”,因為接
口裡面所有的方法都是抽象方法,所以在宣告抽象方法的時候就不用像抽象類別那樣使用
「abstract」這個關鍵字了,預設的已經加上這個關鍵字,另外在介面裡邊的「public」這個訪
問權限也可以去掉,因為預設就是public 的,因為介面裡所有成員都要是公有的,所在對於
介面裡面的成員我們就不能使用「private”的和「protected」的權限了,都要用public 或是默
認的。另外在介面裡面我們也宣告了一個常數“constant“, 因為在介面裡面不能用變數成
員,所以我們要使用const 這個關鍵字宣告。
因為介面是一種特殊的抽象類,裡面所有的方法都是抽象方法,所以介面也不能產生實
例物件;它也做為一種規範,所有抽象方法都需要子類別去實現。
我們可以使用「extends「關鍵字讓一個介面去繼承另一個介面;
程式碼片段
<?php //使用”extends”继承另外一个接口 interface Two extends One{ function fun3(); function fun4(); } ?>
而我們定義一個介面的子類別去實作介面中全部抽象方法使用的關鍵字是“implements”,而
不是我們前面所說的“extends”;
程式碼片段
<?php //使用“implements”这个关键字去实现接口中的抽象方法 class Three implements One{ function fun1(){ … . } function fun2(){ … . } } //实现了全部方法,我们去可以使用子类去实例化对象了 $three=new Three(); ?>
我們也可以使用抽象類,去實作介面中的部分抽象方法,但要想實例化對象,這個抽象
類別還要有子類別把它所有的抽象方法都實現才行;
在前面我們說過,PHP 是單繼承的,一個類別只能有一父類,但是一個類別可以實現多個接
口,就相當於一個類別要遵守多個規範,就像我們不僅要遵守國家的法律,如果是在學校的話,
還要遵守學校的校規一樣;
程式碼片段
<?php //使用implements实现多个接口 class Four implemtns 接口一, 接口二, … .{ //必须把所有接口中的方法都要实现才可以实例化对象。 } ?>
PHP 中不只一個類別可以實作多個接口,也可以在繼承一個類別的同時實作多個接口,一定
要先繼承類別再去實作介面;
程式碼片段
<?php //使用extends继承一个类,使用implements实现多个接口 class Four extends 类名一implemtns 接口一, 接口二, … .{ //所有接口中的方法都要实现才可以实例化对象 … … … .. } ?>
以上是php物件導向的介面技術實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!