php面向?qū)ο笕ヂ?(十四) php5接口技術(shù)
更新時(shí)間:2009年09月30日 22:38:51 作者:
PHP 與大多數(shù)面向?qū)ο缶幊陶Z(yǔ)言一樣,不支持多重繼承.也就是說(shuō)每個(gè)類只能繼承一個(gè)父類。
20.PHP5 接口技術(shù)
PHP 與大多數(shù)面向?qū)ο缶幊陶Z(yǔ)言一樣,不支持多重繼承.也就是說(shuō)每個(gè)類只能繼承一個(gè)父
類。為了解決這個(gè)問(wèn)題,PHP 引入了接口,接口的思想是指定了一個(gè)實(shí)現(xiàn)了該接口的類必須
實(shí)現(xiàn)的一系列方法。接口是一種特殊的抽象類,抽象類又是一種特殊的類,所以接口也是一
種特殊的類,為什么說(shuō)接口是一種特殊的抽象類呢?如果一個(gè)抽象類里面的所有的方法都是
抽象方法,那么我們就換一種聲明方法使用“接口”;也就是說(shuō)接口里面所有的方法必須都是
聲明為抽象方法,另外接口里面不能聲明變量,而且接口里面所有的成員都是public 權(quán)限的。
所以子類在實(shí)現(xiàn)的時(shí)候也一定要使用public 權(quán)限實(shí)限。
聲明一個(gè)類的時(shí)候我們使用的關(guān)鍵字是“class”,而接口一種特殊的類,使用的關(guān)鍵字
是“interface”;
類的定義:class 類名{ … } ,接口的聲明:interface 接口名{ … }
代碼片段
<?
abstract class Demo{
var $test;
abstract function fun1();
abstract function fun2();
function fun3(){
… .
}
}
$demo=new Demo(); //抽象類為能產(chǎn)生實(shí)例對(duì)象,所以這樣做是錯(cuò)的,實(shí)例化對(duì)象交給子類
class Test extends Demo{
function fun1(){
…
}
function fun2(){
…
}
}
$test=new Test(); //子類可以實(shí)例化對(duì)象,因?yàn)閷?shí)現(xiàn)了父類中所有抽象方法
?>
上例中定義了一個(gè)接口“one”,里面聲明了兩個(gè)抽象方法“fun1”和“fun2”,因?yàn)榻?
口里面所有的方法都是抽象方法,所以在聲明抽象方法的時(shí)候就不用像抽象類那樣使用
“abstract”這個(gè)關(guān)鍵字了,默認(rèn)的已經(jīng)加上這個(gè)關(guān)鍵字,另外在接口里邊的“public”這個(gè)訪
問(wèn)權(quán)限也可以去掉,因?yàn)槟J(rèn)就是public 的,因?yàn)榻涌诶锼谐蓡T都要是公有的,所在對(duì)于
接口里面的成員我們就不能使用“private”的和“protected”的權(quán)限了,都要用public 或是默
認(rèn)的。另外在接口里面我們也聲明了一個(gè)常量“constant“, 因?yàn)樵诮涌诶锩娌荒苡米兞砍?
員,所以我們要使用const 這個(gè)關(guān)鍵字聲明。
因?yàn)榻涌谑且环N特殊的抽象類,里面所有的方法都是抽象方法,所以接口也不能產(chǎn)生實(shí)
例對(duì)象;它也做為一種規(guī)范,所有抽象方法需要子類去實(shí)現(xiàn)。
我們可以使用“extends“關(guān)鍵字讓一個(gè)接口去繼承另一個(gè)接口;
代碼片段
<?php
//使用”extends”繼承另外一個(gè)接口
interface Two extends One{
function fun3();
function fun4();
}
?>
而我們定義一接口的子類去實(shí)現(xiàn)接口中全部抽象方法使用的關(guān)鍵字是“implements”,而
不是我們前面所說(shuō)的“extends”;
代碼片段
<?php
//使用“implements”這個(gè)關(guān)鍵字去實(shí)現(xiàn)接口中的抽象方法
class Three implements One{
function fun1(){
… .
}
function fun2(){
… .
}
}
//實(shí)現(xiàn)了全部方法,我們?nèi)タ梢允褂米宇惾?shí)例化對(duì)象了
$three=new Three();
?>
我們也可以使用抽象類,去實(shí)現(xiàn)接口中的部分抽象方法,但要想實(shí)例化對(duì)象,這個(gè)抽象
類還要有子類把它所有的抽象方法都實(shí)現(xiàn)才行;
在前面我們說(shuō)過(guò),PHP 是單繼承的,一個(gè)類只能有一父類,但是一個(gè)類可以實(shí)現(xiàn)多個(gè)接
口,就相當(dāng)于一個(gè)類要遵守多個(gè)規(guī)范,就像我們不僅要遵守國(guó)家的法律,如果是在學(xué)校的話,
還要遵守學(xué)校的校規(guī)一樣;
代碼片段
<?php
//使用implements實(shí)現(xiàn)多個(gè)接口
class Four implemtns 接口一, 接口二, … .{
//必須把所有接口中的方法都要實(shí)現(xiàn)才可以實(shí)例化對(duì)象。
}
?>
PHP 中不僅一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,也可以在繼承一個(gè)類的同時(shí)實(shí)現(xiàn)多個(gè)接口,一定
要先繼承類再去實(shí)現(xiàn)接口;
代碼片段
<?php
//使用extends繼承一個(gè)類,使用implements實(shí)現(xiàn)多個(gè)接口
class Four extends 類名一implemtns 接口一, 接口二, … .{
//所有接口中的方法都要實(shí)現(xiàn)才可以實(shí)例化對(duì)象
… … … ..
}
?>
PHP 與大多數(shù)面向?qū)ο缶幊陶Z(yǔ)言一樣,不支持多重繼承.也就是說(shuō)每個(gè)類只能繼承一個(gè)父
類。為了解決這個(gè)問(wèn)題,PHP 引入了接口,接口的思想是指定了一個(gè)實(shí)現(xiàn)了該接口的類必須
實(shí)現(xiàn)的一系列方法。接口是一種特殊的抽象類,抽象類又是一種特殊的類,所以接口也是一
種特殊的類,為什么說(shuō)接口是一種特殊的抽象類呢?如果一個(gè)抽象類里面的所有的方法都是
抽象方法,那么我們就換一種聲明方法使用“接口”;也就是說(shuō)接口里面所有的方法必須都是
聲明為抽象方法,另外接口里面不能聲明變量,而且接口里面所有的成員都是public 權(quán)限的。
所以子類在實(shí)現(xiàn)的時(shí)候也一定要使用public 權(quán)限實(shí)限。
聲明一個(gè)類的時(shí)候我們使用的關(guān)鍵字是“class”,而接口一種特殊的類,使用的關(guān)鍵字
是“interface”;
類的定義:class 類名{ … } ,接口的聲明:interface 接口名{ … }
代碼片段
復(fù)制代碼 代碼如下:
<?
abstract class Demo{
var $test;
abstract function fun1();
abstract function fun2();
function fun3(){
… .
}
}
$demo=new Demo(); //抽象類為能產(chǎn)生實(shí)例對(duì)象,所以這樣做是錯(cuò)的,實(shí)例化對(duì)象交給子類
class Test extends Demo{
function fun1(){
…
}
function fun2(){
…
}
}
$test=new Test(); //子類可以實(shí)例化對(duì)象,因?yàn)閷?shí)現(xiàn)了父類中所有抽象方法
?>
上例中定義了一個(gè)接口“one”,里面聲明了兩個(gè)抽象方法“fun1”和“fun2”,因?yàn)榻?
口里面所有的方法都是抽象方法,所以在聲明抽象方法的時(shí)候就不用像抽象類那樣使用
“abstract”這個(gè)關(guān)鍵字了,默認(rèn)的已經(jīng)加上這個(gè)關(guān)鍵字,另外在接口里邊的“public”這個(gè)訪
問(wèn)權(quán)限也可以去掉,因?yàn)槟J(rèn)就是public 的,因?yàn)榻涌诶锼谐蓡T都要是公有的,所在對(duì)于
接口里面的成員我們就不能使用“private”的和“protected”的權(quán)限了,都要用public 或是默
認(rèn)的。另外在接口里面我們也聲明了一個(gè)常量“constant“, 因?yàn)樵诮涌诶锩娌荒苡米兞砍?
員,所以我們要使用const 這個(gè)關(guān)鍵字聲明。
因?yàn)榻涌谑且环N特殊的抽象類,里面所有的方法都是抽象方法,所以接口也不能產(chǎn)生實(shí)
例對(duì)象;它也做為一種規(guī)范,所有抽象方法需要子類去實(shí)現(xiàn)。
我們可以使用“extends“關(guān)鍵字讓一個(gè)接口去繼承另一個(gè)接口;
代碼片段
復(fù)制代碼 代碼如下:
<?php
//使用”extends”繼承另外一個(gè)接口
interface Two extends One{
function fun3();
function fun4();
}
?>
而我們定義一接口的子類去實(shí)現(xiàn)接口中全部抽象方法使用的關(guān)鍵字是“implements”,而
不是我們前面所說(shuō)的“extends”;
代碼片段
復(fù)制代碼 代碼如下:
<?php
//使用“implements”這個(gè)關(guān)鍵字去實(shí)現(xiàn)接口中的抽象方法
class Three implements One{
function fun1(){
… .
}
function fun2(){
… .
}
}
//實(shí)現(xiàn)了全部方法,我們?nèi)タ梢允褂米宇惾?shí)例化對(duì)象了
$three=new Three();
?>
我們也可以使用抽象類,去實(shí)現(xiàn)接口中的部分抽象方法,但要想實(shí)例化對(duì)象,這個(gè)抽象
類還要有子類把它所有的抽象方法都實(shí)現(xiàn)才行;
在前面我們說(shuō)過(guò),PHP 是單繼承的,一個(gè)類只能有一父類,但是一個(gè)類可以實(shí)現(xiàn)多個(gè)接
口,就相當(dāng)于一個(gè)類要遵守多個(gè)規(guī)范,就像我們不僅要遵守國(guó)家的法律,如果是在學(xué)校的話,
還要遵守學(xué)校的校規(guī)一樣;
代碼片段
復(fù)制代碼 代碼如下:
<?php
//使用implements實(shí)現(xiàn)多個(gè)接口
class Four implemtns 接口一, 接口二, … .{
//必須把所有接口中的方法都要實(shí)現(xiàn)才可以實(shí)例化對(duì)象。
}
?>
PHP 中不僅一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,也可以在繼承一個(gè)類的同時(shí)實(shí)現(xiàn)多個(gè)接口,一定
要先繼承類再去實(shí)現(xiàn)接口;
代碼片段
復(fù)制代碼 代碼如下:
<?php
//使用extends繼承一個(gè)類,使用implements實(shí)現(xiàn)多個(gè)接口
class Four extends 類名一implemtns 接口一, 接口二, … .{
//所有接口中的方法都要實(shí)現(xiàn)才可以實(shí)例化對(duì)象
… … … ..
}
?>
您可能感興趣的文章:
- PHP學(xué)習(xí)記錄之面向?qū)ο螅∣bject-oriented programming,OOP)基礎(chǔ)【接口、抽象類、靜態(tài)方法等】
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之接口的繼承定義與用法詳解
- PHP面向?qū)ο笪宕笤瓌t之接口隔離原則(ISP)詳解
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)高級(jí)特性詳解(接口,繼承,抽象類,析構(gòu),克隆等)
- PHP入門(mén)教程之面向?qū)ο蟮奶匦苑治?繼承,多態(tài),接口,抽象類,抽象方法等)
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之接口用法
- PHP 面向?qū)ο蟪绦蛟O(shè)計(jì)(oop)學(xué)習(xí)筆記(一) - 抽象類、對(duì)象接口、instanceof 和契約式編程
- PHP面向?qū)ο蟮倪M(jìn)階學(xué)習(xí)(抽像類、接口、final、類常量)
- php學(xué)習(xí)筆記 面向?qū)ο笾衃接口]與[多態(tài)性]的應(yīng)用
- PHP 的ArrayAccess接口 像數(shù)組一樣來(lái)訪問(wèn)你的PHP對(duì)象
- PHP 對(duì)象接口簡(jiǎn)單實(shí)現(xiàn)方法示例
相關(guān)文章
PHP PDOStatement::fetchColumn講解
今天小編就為大家分享一篇關(guān)于PHP PDOStatement::fetchColumn講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01圖片存儲(chǔ)與瀏覽一例(Linux+Apache+PHP+MySQL)
圖片存儲(chǔ)與瀏覽一例(Linux+Apache+PHP+MySQL)...2006-10-10PHP5.0正式發(fā)布 不完全兼容PHP4 新增多項(xiàng)功能
PHP5.0正式發(fā)布 不完全兼容PHP4 新增多項(xiàng)功能...2006-10-10php讀取本地文件常用函數(shù)(fopen與file_get_contents)
下面我們以.txt文件為實(shí)例來(lái)介紹php讀取本地文件的函數(shù),讀取文件我們可以利用fopen或file_get_contents來(lái)讀取,file_get_contents更簡(jiǎn)單而fopen需要fread配合才可以顯示讀出的內(nèi)容2013-09-09