# 接口
1。現在實中的接口, 不同的種類,但是有相同的能力。 家里耗子多。
買一只狗,或狗都可以,都可以讓他們去干這個活。 用哪個看個人喜歡。

2。程序
```
<pre class="calibre7">```
//發送接口
interface send
{
//實現這個接口的類,必須實現,接口定義的方法
public function send($str);
}
// implements 表示 實現發送接口
class Sms implements send
{
public $to = '13912345678';
public function send($str)
{
var_dump("{$this->to}, $str");
}
}
class Email implements send
{
public $to = '12345678@qq.com';
public function send($str)
{
var_dump("{$this->to}, $str");
}
}
class Order
{
public $notice;
public function __construct($notice) {
$this->notice = $notice;
}
public function delivery()
{
$this->notice->send('發現訂單未支付,但是發貨了');
}
}
$order = new Order(new Sms());
$order->delivery();
$order = new Order(new Email());
$order->delivery();
```
```
輸出:
13912345678, 發現訂單未支付,但是發貨了
[12345678@qq.com](#!), 發現訂單未支付,但是發貨了
- - - - - -
3。疑問,不一定要用接口啊, Sms 跟 Email 實現 send方法就可以接比如這樣。程序一樣正常運行。
```
<pre class="calibre7">```
class Sms
{
public $to = '13912345678';
public function send($str)
{
var_dump("{$this->to}, $str");
}
}
class Email
{
public $to = '12345678@qq.com';
public function send($str)
{
var_dump("{$this->to}, $str");
}
}
```
```
3。但是如果 Order 強制了接口,那么Sms 跟 Email 就必須實現 接口,不然會報錯
```
<pre class="calibre7">```
class Order
{
public $notice;
//參數為 send $notice ,表示 $notice 必須實現了 send接口,不然程序報錯
public function __construct(send $notice) {
$this->notice = $notice;
}
public function delivery()
{
$this->notice->send('發現訂單未支付,但是發貨了');
}
}
```
```
4。那問題來了,寫程序的時候,不強制要求就可以啦 。分析有兩種情況吧。
- - - - - -
一、項目主管比較嚴謹,分配下面的人分別 實現Sms ,跟 Email功能,必須實現這個接口。
- - - - - -
二、PHP一些內置的功能也要實現相應的接口,比如:foreach 是遍歷數組 的,如果對象,也要可以被 foreach遍歷,那么對象就必須實現 Iterator 接口。
- 1、面向對象編程
- 寫的第一個接口
- 類、對象
- 面象對象之前-面向過程編程
- public、protected、private
- 魔法函數
- 接口
- 依賴注入
- 2、簡單工廠
- 現實問題舉例
- 現實問題解決辦法
- 程序問題舉例
- 程序解決辦法
- 在THINKPHP6中的應用
- TP6中,把自己寫的類放到工廠中去
- tp中app()函數自定義的沒提示問題
- 3、外觀模式
- 外觀模式-現實問題舉例
- 外觀模式-現實問題解決辦法
- 程序問題舉例2
- 在THINKPHP6中的影子
- 外觀模式--個人感想
- 4、適配器模式
- 現實問題舉例3
- 實現場景
- 程序舉例
- 5、單例模式
- 現實問題舉例4
- 現實問題解決辦法4
- 程序舉例4
- 改進1
- THINKPHP6中的單例
- TP容器實現的“單例”
- 6、生成器模式
- 舉例5
- php代碼舉例
- 代碼分析
- php代碼調整
- 再次改進,就是生成器模式了
- 對生成器模式的個人感想
- 7、原型模式
- 模式目地
- 實現舉例
- 代碼舉例
- 淺克與深克
- 8、中介者模式
- 中介者-定義
- 中介者-結構
- 中介者-php代碼舉例
- 中介者-實際項目的一個例子
- 中介者-實際項目PHP
- 9、代理模式
- 代理模式-現實問題舉例
- 代理模式-php代碼
- 10、觀察者模式
- 小時候煮飯的例子
- 觀察者-編程中的問題
- 觀察者-php代碼舉例
- 觀察者-thinkphp6中的應用
- 11、命令模式
- 命令模式-定義
- 命令模式-php代碼舉例
- 命令模式-個人感覺
- 12、迭代器模式
- 迭代器-定義
- 虛構的分享微信美女故事
- 迭代器-php代碼舉例 - 不想完全公布的問題
- 迭代器-php代碼舉例 - 解決辦法
- 13、組合模式
- 組合模式定義
- 組合模式-實際項目舉例
- 組合模式-問題
- 組合模式-如果圖片也有這個接口呢
- 真正的組合模式-例子
- 14、模板方法模式
- 模板方法-定義
- 模板方法-現實參考
- 模板方法-項目問題舉例
- 模板方法-未用模式的代碼
- 模板方法-使用模式的代碼
- 15、策略模式
- 策略模式-定義
- 策略-虛構現實案例
- 策略-虛構現實案例PHP代碼
- 策略-實際項目舉例
- 策略-實際項目舉例PHP代碼-未使用模式
- 策略-實際項目舉例PHP代碼-使用模式
- 16、狀態模式
- 狀態模式定義
- 狀態模式-實現案例
- 狀態模式-未使用模式
- 狀態模式-使用模式
- 17、備忘錄模式
- 備忘錄模式-定義
- 備忘錄-形式圖形
- 備忘錄-比較真統的php代碼
- 備忘錄-實際項目想到的例子
- 備忘錄-實際例子代碼
- 18、享元模式
- 享元模式-定義
- 享元模式-看電影故事
- 享元模式-圖形
- 享元模式-看電影PHP代碼
- 享元模式-THINKPHP6中的應用
- 19、解釋器模式
- 解釋器-定義
- abc加減解釋器例子
- 解釋器-圖解算法
- 解釋器-三種類型對應的php代碼
- 解釋器-完整的代碼
- 解釋器-感覺
- 20、裝飾模式
- 裝飾模式-定義
- 裝飾模式-快餐舉例
- 裝飾模式-php代碼
- 裝飾者模式-實際案例
- 21、責任鏈模式
- 責任鏈-定義
- 責任鏈-面試的例子
- 責任鏈-面試php代碼
- 責任鏈-THINKPHP6中用應用
- 22、橋接模式
- 橋接模式-定義
- 橋接模式-案例舉例
- 橋接模式-問題是怎么來的呢
- 橋接模式-使用模式后的代碼
- 23、訪問者模式
- 訪問者-定義
- 訪問者-結構關系
- 訪問者-php代碼舉例