當前位置:才華齋>計算機>php語言>

php面向物件全攻略 php5介面技術

php語言 閱讀(1.22W)

PHP 與大多數面向物件程式語言一樣,不支援多重繼承.也就是說每個類只能繼承一個父類。以下是小編為大家整理的關於PHP語言的相關知識,歡迎來閱讀!

php面向物件全攻略 php5介面技術

PHP 與大多數面向物件程式語言一樣,不支援多重繼承.也就是說每個類只能繼承一個父類。為了解決這個問題,PHP 引入了介面,介面的思想是指定了一個實現了該介面的類必須實現的一系列方法。介面是一種特殊的抽象類,抽象類又是一種特殊的類,所以介面也是一種特殊的類,為什麼說介面是一種特殊的'抽象類呢?如果一個抽象類裡面的所有的方法都是象方法,那麼我們就換一種宣告方法使用“介面”;也就是說接口裡面所有的方法必須都宣告為抽象方法,另外接口裡面不能宣告變數,而且接口裡面所有的成員都是public 許可權的。所以子類在實現的時候也一定要使用public 許可權實限。宣告一個類的時候我們使用的關鍵字是“class”,而介面一種特殊的類,使用的關鍵字是“interface”;

類的定義:class 類名{ … } ,介面的宣告:interface 介面名{ … }

程式碼片段

複製程式碼 程式碼如下:

<?

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 介面一, 介面二, … .{

//所有介面中的方法都要實現才可以例項化物件

… … … ..

}

?>

?>