php介面繼承
PHP與大多數面向對象編程語言一樣,不支持多重繼承.也就是說每個類只能繼承一個父類.為了解決這個問題,PHP引入了介面,介面的思想是指定了一個實現了該介面的類必須實現的一系列方法.介面是一種特殊的抽象類,抽象類又是一種特殊的類,所以介面也是一種特殊的類,為什麼說介面是一種特殊的抽象類呢?如果一個抽象類裡面的所有的方法都是抽象方法,那麼我們就換一種聲明方法使用「介面「;也就是說介面裡面所有的方法必須都是聲明為抽象方法,另外介面裡面不能聲明變數(但可聲明常量constant),而且介面裡面所有的成員都是public許可權的。所以子類在實現的時候也一定要使用public許可權實限。
聲明一個類的時候我們使用的關鍵字是」class」,而介面一種特殊的類,使用的關鍵字是「interface」;
類的定義: class 類名{ … } ,介面的聲明:interface 介面名{ …}
代碼
代碼
<?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」關鍵字讓一個介面去繼承另一個介面:
<?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介面調用的方法復用多一點還是盡量不復用好一點從性能上來講,方法的復用對性能的影響有多大
代碼復用性,優點就是可以減少代碼量,後期維護的時候不需要重復的去修改一大片相同的代碼,比如寫了一個獲取ID的公共方法,這種就沒必要每次重復的寫代碼;當然了,如果一個文件中有很多函數的話,這些函數不用也會被載入到內存。
但是現在的伺服器配置都是相當的高,提升點兒內存代價不大;如果寫的代碼不進行封裝,不考慮重復性,那麼後期項目升級開發和維護的時候,付出的代價是很大的,代價大不說,並且都是重復的工作量,沒多大意義,一般軟體公司,都會對常用的函數塊繼續封裝,然後存放到公共通用的文件裡面,來進行調用。
③ thinkphp5 implements和extends的區別
extends 是繼承某個類
繼承之後可以使用父類的方法
也可以重寫父類的方法
implements 是實現多個介面
介面的方法一般為空的
必須重寫才能使用
extends是繼承父類,只要那個類不是聲明為final或者那個類定義為abstract的就能繼承,JAVA中不支持多重繼承,但是可以用介面來實
現,這樣就要用到implements,繼承只能繼承一個類,但implements可以實現多個介面,用逗號分開就行了
比如
class A extends B implements C,D,E
extends 繼承類implements 實現介面
類和介面是不同的。類里是有程序實現的;而介面無程序實現,只可以預定義方法 extends 繼承類
implements 實現介面
Java也提供繼承機制﹐但還另外提供一個叫interface的概念。由於Java的繼承機制只能提供單一繼承(就是只能繼承一種父類別)﹐所以就以
Java的interface來代替C++的多重繼承。interface就是一種介面﹐規定欲溝通的兩物件﹐其通訊該有的規范有哪些。如以Java程式
語言的角度來看﹐Java的interface則表示:一些函數或資料成員﹐為另一些屬於不同類別的物件所需共同擁有﹐則將這些函數與資料成員﹐定義在一
個interface中﹐然後讓所有不同類別的Java物件可以共同操作使用之。
④ PHP不是不支持多重繼承那這個是什麼問題 - PHP框架開發
主要是php這樣的語言實現多繼承非常麻煩。。。。。代價昂貴在我設計開發過程中,發現確實需要多繼承的。。。。通過介面的\"多繼承\",作用不大。。。。。只能重用介面定義,。。。
⑤ 我們應該什麼情況下使用繼承,什麼情況下用實例化,什麼情況下使用一個介面 - PHP進階討論
要使用繼承的話,可以將兩個類放到一個文件中,你這個父類只會有一個基類,這樣也可以。繼承不繼承的對你這個來說,沒什麼大不了,你也可以直接擴展父類。個人觀點,那些設計模式沒必要生搬硬套,性能也很重要,如果不用那些設計模式,也可以很簡便的達到目的的話,就不用。
⑥ php中的介面是指什麼
介面interface是一個來規定,給人繼承用的源東西,有點像抽象類。
介面定義了實現某種服務的一般規范,聲明了所需的函數和常量,但不指定如何實現。之所以不給出實現的細節,是因為不同的實體可能需要用不同的方式來實現公共的方法定義。關鍵是要建立必須實現的一組一般原則,只有滿足了這些原則才能說實現了這個介面。
(6)php介面繼承擴展閱讀
PHP介面(interface)的特點 :
1、介面的方法必須是公開的。
2、介面的方法默認是抽象的,所以不在方法名前面加abstract。
3、介面可以定義常量,但不能定義成員屬性,常量的定義和用法和類中常量一樣。
4、類可以實現多個介面(相當於把多個功能集於一身,如手機實現了小靈通、MP3、MP4的功能)
5、介面也可以繼承介面。
PHP同大多數的面向對象語言一樣,並不支持多重繼承。如果需要實現多重繼承功能,在PHP中,可以通過介面,它是PHP解決多重繼承問題的方法,在php5.4版本之後有個類的新特性trait,有興趣的可以網路下。
⑦ 介面 繼承 php
首先 這是一個很好的PHP介面的例子
在這里PC類他實例化的對象是$P
PC類有一個方法 叫PCUSB(),調用的時候 參數 是一個繼承了介面usb的MP3類的對象$MP3
因此在此時 $MP3 實現了(或者是override(重寫了))介面里邊的type 和alert 方法
所以呢
$p->pcusb($mp3);
PCUSB被調用時傳參
function pcusb($mp3){
$mp3->type();
echo "<hr>";
$mp3->alert();
}
就相當於 直接調用了 $MP3中的方法一樣了
⑧ php中類的繼承是通過哪個關鍵字來實現的
php類有三種:
普通寫的class 類 用extends來繼承
抽象類abstract類 也是用extends來繼承
介面類interface類用的是implements來繼承的
⑨ php中implements和extends的區別
extends是繼承父類,只要那個類不是聲明為final或者那個類定義為abstract的就能繼承,JAVA中不支持多重繼承,但是可以用介面來實現,這樣就要用到implements,繼承只能繼承一個類,但implements可以實現多個介面,用逗號分開就行了