全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货  >  详情

PHP中的interface有什么用处?

来源:千锋教育
发布人:xqq
2023-10-17

推荐

在线提问>>

一、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、接口也可以继承接口。

相关文章

Web前端开发是什么技术?

分析型数据库是什么,和关系型数据库有什么区别?

对数量庞大的照片进行分类管理,较好的方便检索的方法是什么?

web前端会用到哪些软件工具?

Flash动画制作的原理是什么?

开班信息 更多>>

课程名称
全部学科
咨询

HTML5大前端

Java分布式开发

Python数据分析

Linux运维+云计算

全栈软件测试

大数据+数据智能

智能物联网+嵌入式

网络安全

全链路UI/UE设计

Unity游戏开发

新媒体短视频直播电商

影视剪辑包装

游戏原画