接口是什么?
使用接口(interface),可以指定某個類必須實現哪些方法,但不需要定義這些方法的具體內容。
接口是通過 interface 關鍵字來定義的,就像定義一個標準的類一樣,但其中定義所有的方法都是空的。
什么時候用接口?
1、定規范,保持統一性;
2、多個平級的類需要去實現同樣的方法,只是實現方式不一樣
接口的特性:
1. 接口中定義的所有方法都必須是公有
2. 接口的方法默認是抽象的,所以不在方法名前面加abstract
3. 類中必須實現接口中定義的所有方法,否則會報一個致命錯誤
4. 接口可以定義常量,但不能定義成員屬性,常量的定義和用法和類中常量一樣,常量不能被子類或子接口所覆蓋
5. 類可以實現多個接口(相當于把多個功能集于一身,如手機實現了小靈通、MP3、MP4的功能)
6. 接口也可以繼承接口
7. 類要實現接口,必須使用和接口中所定義的方法完全一致的方式。否則會導致致命錯誤。
實例一:
~~~
// 聲明一個接口
interface test
{
public function setVariable($name, $var);
private function getHtml($template);// 提示錯誤,接口中定義的所有方法都必須是公有
}
~~~
實例二:
~~~
// 聲明一個接口
interface test
{
public function setVariable($name, $var);
public function getHtml($template);
}
class a implements test{
public function setVariable($name, $var)
{
// TODO: Implement setVariable() method.
}
// 屏蔽該方法會提示錯誤 ,類中必須實現接口中定義的所有方法
/*public function getHtml($template)
{
// TODO: Implement getHtml() method.
}*/
}
~~~
實例三:
~~~
interface a
{
const b = 'Interface constant';
//public $b = ''; // 錯誤寫法 接口不能定義成員屬性
}
// 輸出接口常量
echo a::b;
// 錯誤寫法,因為常量不能被覆蓋。接口常量的概念和類常量是一樣的。
/*class b implements a
{
const b = 'Class constant';
}*/
~~~
實例四:
~~~
interface a
{
public function foo();
}
interface b
{
public function bar();
}
// 類可以實現多個接口
class d implements a, b
{
public function foo()
{
}
public function bar()
{
}
}
~~~
文章來源:
https://www.cnblogs.com/minigrasshopper/p/7754512.html
http://blog.csdn.net/u014222774/article/details/54880006
http://www.php.net/manual/zh/language.oop5.interfaces.php
- 前言
- 函數參考
- Socket 函數
- socket_accept
- socket_bind
- socket_clear_error
- socket_close
- socket_connect
- socket_create_listen
- socket_create_pair
- socket_create
- socket_getpeername
- socket_getsockname
- socket_last_error
- socket_listen
- socket_read
- socket_recv
- socket_select
- socket_send
- socket_set_block
- socket_set_nonblock
- SplQueue
- 魔術方法
- 魔術常量
- 雜項
- backlog的用處
- new self()和new static()的區別
- PHP變量的生命周期
- PHP抽象類
- 對象接口
- PHP中的常用關鍵字
- 常量
- 內存泄露
- global 與 $GLOBAL
- 簡單說明CGI和動態請求是什么
- 設計模式
- 單例模式
- 工廠模式
- 適配器模式
- 策略模式
- 觀察者模式
- 控制反轉IoC簡介
- session
- use_trans_sid
- auto_start
- session_id
- cookie_secure
- 面試
- 數據庫相關
- 語句相關
- 索引相關
- 字段相關
- PHP相關
- 字符串相關
- 函數相關
- 運算符優先級相關
- 錯誤相關
- redis相關
- 10個常見的Redis面試"刁難"問題
- mysql
- MySQL中的鎖
- MySQL存儲引擎MyISAM 和 InnoDB的區別
- MySQL半同步復制
- explain 命令詳解
- 索引
- 數據庫事務
- MySQL和B樹的那些事
- git
- github----向開源框架提交pr的過程
- 推薦博客
- linux
- 命令
- free
- 高并發
- 搶購/秒殺功能
- 算法
- 一致性Hash算法