iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >详解Laravel服务容器的优势
  • 615
分享到

详解Laravel服务容器的优势

2024-04-02 19:04:59 615人浏览 薄情痞子
摘要

目录概述使用服务容器的优势例一、发送邮件例二、实现单例模式例三、旅行者去旅行总结概述 laravel服务容器就像一个高度自动化的工厂,你需要的东西,定制好模型,使用特定接口来制造。

概述

laravel服务容器就像一个高度自动化的工厂,你需要的东西,定制好模型,使用特定接口来制造。

因为使用了服务容器,laravel中大部分对象实例化的方式是这样的:


$obj1 = $container->make('class1', 'class2');
 
$obj2 = $container->make('class3', 'class4');

但是在没有使用服务容器的情况下,以下这种方式同样可以做到:


$obj1 = new class1(new class2());
 
$obj2 = new class3(new class4());

使用服务容器的优势

下面我们通过一些具体例子来分析下它的优势:

例一、发送邮件

我们把发送邮件的功能封装成一个类,需要使用的时候,实例化并调用发送方法。

以下是不使用laravel服务容器常见的方式:



 
class EmailService{
    public function send(){
        //todo 发送邮件方法
    }
}
//如果任何地方要发邮件我们就复制下面这两行代码
 
$emailService = new EmailService();
 
$emailService->send();

使用了laravel服务容器以后:


$this->app->bind('emailService', function ($app) {
    return new EmailService();
});
//如果任何地方要发邮件我们就复制下面这两行代码
$emailService = app('emailService');
$emailService->send();

这使得我们的代码更加简洁了,并且由于有了中间层,灵活性提高了(解耦),那么无论是测试(在测试时我们可以伪造类替换EmailService类)还是优化EmailService类,都变得更加方便。


//只需要改这一个地方
$this->app->bind('emailService', function ($app) {
    return new SupperEmailService();
});

其他调用的部分我们完全不用动,如果我们没有这个绑定操作,那么不得不在每个使用邮件服务的地方做更改。


//使用到EamilSerice类的每个地方都要更改
$emailService = new SupperEmailService();
$emailService->send();

例二、实现单例模式

还是上面的例子,出于性能的考虑,你需要SupperEamilService类实现单例模式,于是在不使用laravel服务容器的情况下,你将SupperEmailService类更改如下:


class SupperEamilService{
    //创建静态私有的变量保存该类对象
    static private $instance;
    //防止直接创建对象
    private function __construct(){
        
    }
    //防止克隆对象
    private function __clone(){

    }
    static public function getInstance(){
        //判断$instance是否是Uni的对象
        //没有则创建
        if (!self::$instance instanceof self) {
            self::$instance = new self();
        }
        return self::$instance;
    }
    //发送邮件方法
    public function send(){

    }

}

除此之外,由于现在SupperEamilService类构造函数为私有,无法通过new关键字来实例化对象,所以在每个实例化SupperEmailService类的地方都要改成这样:


$emailService=SupperEmailService::getInstance();
$emailService->send();

laravel服务容器天生支持单例,下面是laravel的实现方式:


//只需要把bind改成singleton
$this->app->singleton('emailService', function ($app) {
    return new SupperEmailService();
});

要实现单例甚至只需要改一行代码,把原来的bind方法改成singleton ,通过容器取出来的便是单例,真是太方便了。

例三、旅行者去旅行

这个例子假设一个旅行者去西藏旅行,可以做火车(train)或者走路(leg)去。

不使用laravel服务容器:


<?PHP
interface TrafficTool{
    public function Go();
}
class Train implements TrafficTool{
    public function go(){
        echo "train....";
    }

}
class Leg implements TrafficTool{
    public function go(){
        echo "leg..";
    }
}
class Traveller{
    
    protected $_trafficTool;
    public function __construct(TrafficTool $trafficTool){
        $this->_trafficTool = $trafficTool;
    }
    public function visitTibet() {
        $this->_trafficTool->go();
    }

}

当旅行者要坐火车去旅行通常我们这样写:


<?php
$train = new Train();
$tra = new Traveller($train);
$tra->visitTibet();

事实上这种写法已经非常不错了,因为对于旅行工具的依赖已经通过接口的方式转移到外部了。但是使用new来实例化对象的时候还是会产生依赖.比如上面trafficTool),这说明我们要创建一个Traveller之前必须得有一个$trafficTool,即Traveller依赖于trafficTool.当使用new来实例化Traveller的时候,Traveller和trafficTool之间就产生了耦合.这样,这两个组件就没办法分开了。

现在我们来看看使用laravel服务容器是怎么实现的:

在服务容器中绑定类


<?php
namespace App\Providers;
use Laravel\Lumen\Providers\EventServiceProvider as ServiceProvider;
class RepositoryServiceProvider extends ServiceProvider{
    public function reGISter(){
        //在服务容器中绑定类
        $this->app->bind( 'TrafficTool', 'Train');
        $this->app->bind('Traveller', 'Traveller');
    }
}

实例化对象


<?php
// 实例化对象
$tra = app()->make('Traveller');
$tra->visitTibet();

当我们使用服务容器获取旅行类的对象时,容器会自动注入对象所需要的参数。而在此之前我只需要绑定特定的类就可以了,这样做才体现了真正的自动化,而且使得旅行类和旅行工具类完全解耦了。当我们需要更改旅行方式的时候,我们就只需要更改绑定就可以了。

总结

上面举了几个简单的例子,如果能完全理解和掌握laravel服务容器,实际开发中它会给你提供更多的便利。当然它也不是完美无缺的,总之实际使用中扬长避短才是关键。

以上就是详解Laravel服务容器的优势的详细内容,更多关于Laravel服务容器的优势的资料请关注编程网其它相关文章!

--结束END--

本文标题: 详解Laravel服务容器的优势

本文链接: https://www.lsjlt.com/news/127134.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解Laravel服务容器的优势
    目录概述使用服务容器的优势例一、发送邮件例二、实现单例模式例三、旅行者去旅行总结概述 laravel服务容器就像一个高度自动化的工厂,你需要的东西,定制好模型,使用特定接口来制造。 ...
    99+
    2024-04-02
  • Laravel服务容器的优势有哪些
    小编给大家分享一下Laravel服务容器的优势有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!概述laravel服务容器就像一个高度自动化的工厂,你需要的东西...
    99+
    2023-06-15
  • ASP 容器和 Laravel:优劣势对比分析。
    ASP容器和Laravel是两个不同的Web应用程序框架。它们都有自己的优势和劣势。在本文中,我们将分析ASP容器和Laravel的优劣势,并比较它们之间的差异。 ASP容器是一种基于.NET的Web应用程序框架。它是一种服务器端技术,提供...
    99+
    2023-09-30
    容器 关键字 laravel
  • 性能调优之java服务器容器调优详解
    目录1.为什么要进行项目性能调优2.服务容器的性能调优2.1对SpringBoot中切入式的Tomcat调优:优化最大线程数调优说明:调优设置2.2网络IO模型调优调优设置2.3容器...
    99+
    2023-05-16
    Java性能调优 Java服务器 Java服务器容器调优
  • WebFlux服务编排使用优势详解
    目录WebFlux服务编排1 串行1.1 不需要 invoker1 的结果1.2 需要返回 invoker1 的结果2 并行2.1 zip 方法2.2 zipWith 方法3 前提W...
    99+
    2023-05-18
    WebFlux 服务编排优势 WebFlux 服务
  • 云服务器的主要优势是哪些内容
    云服务器是一种虚拟化计算平台,它允许用户在本地或云端存储和处理数据,而不必考虑物理服务器的位置和连接。云服务器的主要优势包括: 快速扩展:云服务器具有弹性计算能力和高可用性,可以根据业务需求快速扩展或缩减规模,从而提高业务的性能和可扩展...
    99+
    2023-10-26
    优势 服务器 内容
  • 服务器容灾备份解决方案有什么优势
    服务器容灾备份解决方案的优势主要包括: 数据安全性高:容灾备份可以确保数据的安全性,即使主服务器发生故障或遭受攻击,也能够快速恢...
    99+
    2024-04-24
    服务器
  • 服务器容灾备份解决方案有哪些优势
    服务器容灾备份解决方案的优势有:1、能实现短时间内平稳切换,业务零缝隙衔接;2、能实现主备机房间通过传输网连接,维护简单;3、能进行双备份,灵活性好;4、能实时复制备份业务数据,有效保护数据安全。具体内容如下:互访速度传输网保证短时间内实现...
    99+
    2024-04-02
  • Laravel服务容器绑定与解析的示例
    这篇文章将为大家详细讲解有关Laravel服务容器绑定与解析的示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。关于服务容器  手册上是这样介绍的:Laravel 服务容器是用于管理类的依赖和执行依赖注入...
    99+
    2023-06-14
  • 服务器容器与虚拟机:优势、劣势和应用场景
    服务器容器: 轻量级:容器仅包含应用程序运行所需的最少资源,使它们启动和停止速度更快。 可移植性:容器可以在不同操作系统和硬件平台上轻松传输和运行。 可扩展性:容器可以轻松地向上或向下扩展,以满足应用程序不断变化的需求。 资源隔离:容器...
    99+
    2024-04-02
  • 云服务器的优势
    1. 灵活性 云服务器可以根据业务需求进行弹性扩容和缩容,无需购买新的硬件设备,也无需担心硬件设备的维护和更新。这种灵活性可以帮助企业更好地应对业务高峰期和低谷期,从而提高业务的稳定性和可靠性。 2. 可靠性 云服务器通常采用分布式架构,...
    99+
    2023-10-26
    优势 服务器
  • 云服务器的主要优势是哪些内容呢
    云服务器是一种虚拟化的云平台,可以为用户提供快速、可靠、安全的计算服务。云服务器采用了多种技术,包括虚拟化、服务器虚拟化、软件定义存储、容器等,这些技术可以帮助用户快速创建、部署和管理大量的虚拟机,同时减少对硬件资源的依赖。 以下是云服务...
    99+
    2023-10-26
    优势 服务器 内容
  • 阿里云虚拟服务器用处与优势详解
    阿里云虚拟服务器,简称“阿里云服务器”,是一种由阿里云提供的虚拟化计算资源,具有高效、稳定、灵活的特点。本文将详细说明阿里云虚拟服务器的用处和优势。 一、用处企业应用开发:阿里云服务器提供了丰富的开发工具和环境,企业可以在此平台上进行应用程...
    99+
    2023-11-12
    阿里 用处 详解
  • 服务器托管的优势
    在当今互联网时代,服务器托管成为越来越多企业和个人优选的解决方案。服务器托管是指将服务器设备放置在专门的数据中心中,由专业的服务提供商进行管理和维护。本文将探讨服务器托管的优势,以帮助读者了解为什么选择服务器托管是一种明智的决策。 1. ...
    99+
    2024-01-24
    服务器托管的优势 服务器租用 云服务器知识
  • 云服务器ecs的优势
    云服务器ecs(elastic cloud storage system)是一种基于云计算技术的虚拟计算平台,可以让用户通过互联网访问并管理虚拟数据中心资源(如存储、服务器、网络设备等)。与传统的本地虚拟计算平台相比,云服务器ecs具有以下...
    99+
    2023-10-25
    优势 服务器 ecs
  • 云服务器的主要优势是哪些方面的内容
    云服务器的主要优势如下: 高可靠性:云服务器可以提供高度可靠的云计算数据中心服务,保证数据的安全可靠性和持续稳定性。 高可用性:云服务器可以提供高度可靠的容错能力,当主服务器出现故障时,云服务器可以自动切换到备份服务器上运行,确保重要数...
    99+
    2023-10-27
    哪些方面 优势 服务器
  • laravel服务容器的概念是什么
    这篇文章主要介绍“laravel服务容器的概念是什么”,在日常操作中,相信很多人在laravel服务容器的概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”laravel服务容器的概念是什么”的疑惑有所...
    99+
    2023-06-29
  • 阿里云服务器的优势和劣势
    阿里云服务器是一款功能丰富的云服务器,它具有以下优势和劣势:优势: - 高可用性:阿里云服务器采用双重主机模式和容器化技术,能够保证系统的高可用性和稳定性。 - 高性能:阿里云服务器采用了多核心、多线程技术,可以提供更快的处理能力和更大的内...
    99+
    2023-10-26
    阿里 劣势 优势
  • 云服务器的主要优势是哪些内容和功能
    云服务器(Cloud Stack)是一种云计算服务,可以通过互联网连接到多个设备上,使用户无需拥有计算机或服务器设备即可访问互联网和其他远程资源。以下是云服务器的主要优势和功能: 优势: 高可用性:云服务器提供高可用性,因为它们可以在多...
    99+
    2023-10-26
    优势 功能 服务器
  • 云服务器的主要优势是哪些内容和特点
    云服务器(Cloud Server)是一种虚拟服务器,它提供了一种高可用性、高性能、稳定性和可靠性的云计算环境,能够为多个云服务提供平台基础架构。以下是云服务器的主要优势和特点: 高可用性:云服务器通过多台计算机互联来提供高可用性,当主...
    99+
    2023-10-26
    优势 服务器 内容
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作