PHP中的interface有什么用處?
一、PHP的interface有什么用處
PHP 中的 Interface 在工程項目中是非常有用的。其最大的用處就在于
為未來的類切換與拓展保留足夠的兼容性
這種靈活地兼容性,是一個 PHP項目多年維護后才能體會到的。
這里我以 Laravel 框架的工程項目舉例說明。
比如我們有一個數據表,名為 products ,里面存儲了許多商品的信息。
對于新手來說,要對這個類進行操作,一般的做法就是建立一個 控制器(Controller),將對于該表的 “新改讀刪(CURD)”都放在其中。這是官方教程中的方法
php
namespace App\Http\Controller;
…
class ProductController extends Controller
{
? public function index(){ … };
? public function create(Request $request){ … };
? ….
}
?>
這樣并不錯,但未來要做修改的時候,每次都要修改這個類,而有的操作其實是反復寫的,無法復用。
所以在工程項目中,一般都不會按照 官方教程這么寫,這里就需要用 interface 了。
我們先建立一個針對 Product 的服務操作接口
php
namespace App\Repositories\Product;
interface ProductRepository{
?? public function create(array $data);
?? public function find($id=null);
?? public function delete($id=null);
?? ….
}
?>
這里定義了所需的功能函數,再實現一個對應的類
php
namespace App\Repositories\Product;
use App\Models\Product;
class ProductEloquent implememts ProductReposity
{
?? public function create(array $data){ … };
?? public function find($id=null){ … };
?? public function delete($id=null){ … };
?? ….
}
?>
將原有的 Controller 類拆分到兩個文件中,我們就可以完成如下工作:
以后該項目中所有與 Product 相關的操作,都不再關聯到 ProductEloquent 類,而關聯到 ProductReposity 接口上。php
/** use App\Repositories\ProductEloquent; **/
use App\Repositories\ProductReposity;
?>
再利用 Laravel 的服務注冊,將接口與實際類關聯起來。這個功能在?AppServiceProviders.php?中增加如下的代碼。php
namespace App\Providers;
use App\Repositories\ProductRepository;
use App\Repositories\ProductEloquent;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
??? /**
???? * Register any application services.
???? *
???? * @return void
???? */
??? public function register()
??? {
??????? $this->app->singleton(ProductRepository::class, ProductEloquent::class);
??? }
??? /**
???? * Bootstrap any application services.
???? *
???? * @return void
???? */
??? public function boot()
??? {
??????? //
??? }
}
延伸閱讀:
二、PHP接口(interface)的特點
1、接口的方法必須是公開的。
2、接口的方法默認是抽象的,所以不在方法名前面加abstract。
3、接口可以定義常量,但不能定義成員屬性,常量的定義和用法和類中常量一樣。
4、類可以實現多個接口(相當于把多個功能集于一身,如手機實現了小靈通、MP3、MP4的功能)
5、接口也可以繼承接口。

猜你喜歡LIKE
相關推薦HOT
更多>>
分析型數據庫是什么,和關系型數據庫有什么區別?
一、分析型數據庫分析型是從數據庫的作用來劃分的,其重點用來做數據分析(OLAP),大量都是select語句。還有一種是專門用來做事務處理的,一般...詳情>>
2023-10-17 23:26:16
python self是什么意思,怎么使用?
一、python self介紹首先明確的是self只有在類的方法中才會有,獨立的函數或方法是不必帶有self的。self在定義類的方法時是必須有的,雖然在調...詳情>>
2023-10-17 21:24:11
創建Project提交到Github需要做什么?
一、創建Project提交到Github需要做什么1、在Github新建一個repository。2、打開編譯器,編輯最外面的.gitignore,如果沒有就新建一個這樣的文件...詳情>>
2023-10-17 20:23:50
C/S和B/S架構的工作原理及優缺點?
一、C/S架構的工作原理C/S 架構中客戶端和服務器之間通過網絡連接進行通信,客戶端發送請求后會等待服務器返回響應,直到收到響應后才能顯示給...詳情>>
2023-10-17 19:43:01熱門推薦
Web前端開發是什么技術?
沸分析型數據庫是什么,和關系型數據庫有什么區別?
熱對數量龐大的照片進行分類管理,較好的方便檢索的方法是什么?
熱web前端會用到哪些軟件工具?
新Flash動畫制作的原理是什么?
java/Python這么火,c++這么難,為什么我們還要選擇用C++?
app開發的制作為什么報價和開發周期都不一樣?
python self是什么意思,怎么使用?
什么是SEO?
PHP中的interface有什么用處?
創建Project提交到Github需要做什么?
為什么SwiftUI用struct來表示view?
C/S和B/S架構的工作原理及優缺點?
Flash為什么被淘汰了?
技術干貨






