近日做项目中需要在EXEC执行Sql字符串时动态的传入参数并接收返回值,于是研究了一下SqlServer中sp_executesql的使用方法,并做了如下的例子。...在使用sp_executesql动态传入与接收返回参数时需注意以下事项,以避免大家走弯路。..., @ParmDefinition , @VarVariable — —————————————————————————– — 传递两个参数,一个varchar类型参数接收返回值
原文地址:Laravel's Dependency Injection Container in Depth 下面是中文翻译。 Laravel拥有强大的控制反转(IoC)/依赖注入(DI) 容器。...例如,Laravel使用它来确保无论什么时候将单实例Container实例注入到类中都会返回它: $container->instance(Container::class, $container);...,并且可以用于创建具有不同参数的类的多个实例,同时依然注入依赖关系: class Post { public function __construct(Database $db, int $id...下面这些是对其余共用方法的总结: bound() 如果类或名称使用 bind(), singleton(), instance() 或 alias()绑定, bound()将会返回true if (!...() - 清除所有实例对象 flush() - 清除所有绑定和实例,有效的重置容器 setInstance() - 使用 getInstance()替换使用的实例 Note: 最后一节的方法都不是 Container
现在我们知道了,每次请求之后php的变量都会unset(),laravel的singleton只是在某一次请求中singleton,在php中的静态变量也不能在多个请求之间共享,不像Java静态变量拥有全局作用...It feels great to relax. | */ 阶段二:创建laravel实例(服务器容器) 这个阶段是由 bootstrap/app.php 来完成创建实例(服务器容器)的,实际就是项目初始化的过程..../') ); // 绑定内核到服务器容器 // http内核 $app->singleton( Illuminate\Contracts\Http\Kernel::class, App...,拿到用户请求中的报文信息;还是HttpKernel这个类文件,$kernel->handle()拿到用户的请求数据后,返回一个响应实例。...至此,Laravel就完成了一次请求处理。 阶段四:返回响应数据 经过上面漫长的处理之后,HTTP请求终于迎来了最终章,将得到的响应数据输出给用户。
Laravel的核心是IocContainer, 文档中称其为“服务容器”,服务容器是一个用于管理类依赖和执行依赖注入的强大工具,Laravel中的功能模块比如 Route、Eloquent ORM、Request...、Response等等等等,实际上都是与核心无关的类模块提供的,这些类从注册到实例化,最终被我们所使用,其实都是 laravel 的服务容器负责的。...本篇就来探讨一下Laravel中的服务绑定和解析是如何实现的 服务绑定 常用的绑定服务到容器的方法有instance, bind, singleton, alias。下面我们分别来看一下。...instance 将一个已存在的对象绑定到服务容器里,随后通过名称解析该服务时,容器将总返回这个绑定的实例。...} singleton 方法是bind方法的变种,绑定一个只需要解析一次的类或接口到容器,然后接下来对于容器的调用该服务将会返回同一个实例 alias 把服务和服务别名注册到容器: public function
上一节老高零(瞎)散(扯)的讲了一下laravel的基本知识,不知道你现在搞清楚symfony vs laravel的关系了吗?...本节关注一次请求在Laravel中的生命周期!就是从接收到请求到返回请求整个过程中都发生了哪些比较重要的事件。 入口 让我们先把目光移向程序的入口,index.php的内容如下 <?.../bootstrap/autoload.php'; # $app就是后面要提到的容器 $app = require_once __DIR__.'/.....这个share值会影响make的时候的某一步逻辑,具体代码如下,针对singleton的实例化之后会被$app缓存起来,提高了性能,而通过bind方法绑定的类被实例化时每次返回的都是不同的对象。...的启动过程中服务容器——laravel真正的核心一节。
框架启动与服务容器源码 了解了服务容器的原理,要处理的问题,以及 Laravel 中如何使用服务容器以及服务提供者之后,我们就进入到了源码的学习中。...其实服务容器的源码还是比较好理解的,毕竟我们已经自己实现过一个简单的服务容器了。在这里,我们也顺便看一下 Laravel 框架启动时的容器加载情况。...,在 bind() 方法中直接进行了判断,如果是实例则直接放到 instances 数组中,而在 Laravel 中,则是分开了,必须在 instance() 方法中才会将实例保存到 instances...,如果是的话,直接调用这个回调函数并且返回了。...ServiceProvider 服务提供者 通过上面的几个方法学习,我们了解到了整个 Laravel 容器中最重要的几个方法,也就是绑定实现以及获得具体的实例对象,是不是和我们自己实现的那个服务容器非常像
bind 简单绑定 singleton 单例绑定 instance 实例绑定 contextual-binding 上下文绑定 自动注入和解析 Laravel 服务容器实现原理 注册基础服务...,并返回服务实例。...从 Laravel 服务容器解析 - 绑定 这部分的文档我们知道常用的绑定方式有: bind($abstract, $concrete) 简单绑定:将实现绑定到接口,解析时每次返回新的实例; singleton...is_null( $this->getContextualConcrete($abstract) ); // 如果给定的类型已单例模式绑定,直接从服务容器中返回这个实例而无需重新实例化...,解析出扩展绑定结果; 如果绑定服务为单例绑定类型(singleton),将解析到的服务加入到单例对象池; 其它处理如触发绑定监听器、将服务标记为已解析状态等,并返回服务实例。
/vendor/bin/sail up -d 这个时候,容器中的 Laravel 应用就是基于 RoadRunner 驱动的了。...六、注意事项 由于一个 Worker 会处理多个请求,而在同一个 Worker 中,只会在初始化时加载一次 Laravel 应用,后面的请求会复用第一次加载的服务容器(意味着所有服务提供者的 register...和 boot 方法只有第一次加载时会被调用,这就是所谓的「常驻内存」),所以我们在切换到基于 Laravel Octane 驱动 的 HTTP 服务器时,对于服务注入要格外小心,不要将后续会变动的对象以单例模式注入服务容器...容器注入 不要将服务容器、请求实例或者其他会发生变动的对象以单例模式注入到某个服务的构造函数: use App\Service; /** * Register any application services..., function () { return new Service(fn () => Container::getInstance()); }); 这样一来,每次解析出来的都将是最新的对象实例
今天我们从Laravel启动的第一步开始讲起。...随后就是加载内核,载入服务提供者、门面所映射的实体类,中间件,最后到接收http请求并返回结果。...而$app这个在服务提供者的核心变量则就是Application实例化所得,而你在服务提供者内使用的make,bind,singleton来自他的父类Container,都说容器是laravel的核心概念...'/../') ); 上面我们已经获得$app的实例化了,现在通过$app来注册核心类、异常类,并将$app返回给index.php $app->singleton( Illuminate\Contracts...的启动,至于结果的返回则有开发者自行通过控制器或其他可访问类返回。
有时候一个响应多个 Http 请求,这时候使用 match 方法,也可以使用any 方法,any 方法可以实现响应所有 HTTP 请求的路由。...可修改 redirectTo 方法,返回未经身份验证的用户应该重定向到的路径。...(因 laravel 队列系统内容过多,这里只为参考者抛砖引玉,详细自行goole) 06 — laravel 核心服务容器 Laravel 的核心就是一个 IoC 容器,根据文档,称其为 “服务容器...singleton 方法将类或接口绑定到只解析一次的容器中。...一旦单例绑定被解析,相同的对象实例会在随后的调用中返回到容器中: $this->app->singleton('HelpSpot\API', function ($app) { return new
写在前面 学了两个多月的laravel一直没有去研究他的核心概念,在文档上看到些名词 “服务容器”,“服务提供者”...整个人人都是懵的下面结合我这几天的学习谈谈我的理解。...laravel的核心架构:服务容器,服务提供者,门面,契约。...在laravel中应用本身就是一个容器,容器管理调用各种服务 laravel在运行的时候会创建一个app对象 这个对象就是容器 所有的服务都是在app中调用的。...绑定后的类可直接依赖注入,自动处理依赖关系 Route::get('test',function(Family $family){ }); 上面只是一个基本绑定 bind的第一个参数为 要绑定的类名,第二个参数为闭包函数返回类的实例...这个 provides 方法返回该提供者注册的服务容器绑定: 以laravel框架的CacheServiceProvider为例 <?
Laravel 服务提供者指南 如果你使用过 Laravel 框架的话,那么,你不可能没听说过服务容器和服务提供者。...理解服务容器和服务提供者 什么是服务容器 简而言之,Laravel 服务容器 是一个用于存储绑定组件的盒子,它还会为应用提供所需的服务。...,然后在使用时从服务容器中自动解析出所需实例及其依赖!...然后,当我们需要在 Laravel 中使用 cache 服务是,服务容器会解析出 CacheManager 实例并返回。也就是说我们仅仅是提供了一个可以从 $this->app 访问的对应关系表。...这样,当需要使用 App\Library\Services\DemoOne 服务而被解析时,就回调用闭包方法,创建实例并返回 App\Library\Services\DemoOne 对象。
bootstrap/app.php读注释可以理解到14~16行代码new了一个Illuminate\Foundation\Application实例,该实例作用是粘合laravel各组件和作为系统的依赖注入容器...的IOC容器对外开放的注册实例的入口(之一)。...2.registerBaseBindings()这一步的逻辑是把Illuminate\Foundation\Application自身注册为Laravel的IOC容器实例把自身注册为'app'的实例、把自身注册为...bind()和singleton()的实现,目前只需要了解它会关联到IOC容器注册且实例化类的核心,且在第一次显示获取实例前不会实例化对应类,即是注册时并不会实例化类或执行注册的回调函数,不了解反射的请先学习一下...()的逻辑结束总结这次内容只看了Application的实例化,做的事情不多,可以概括为基于IoC容器,组织项目目录结构,注册Application作为IoC容器实例,注册路由、Event、日志三大模块的
应用解析内核 在将应用初始化阶段将Http内核绑定至应用的服务容器后,紧接着在 public/index.php中我们可以看到使用了服务容器的 make方法将Http内核实例解析了出来: $kernel...请求实例,在后续应用剩余的生命周期中 Request请求实例就是对本次HTTP请求的抽象,关于Laravel Request请求实例的讲解可以参考以前的章节。...之前的文章里一直在说服务容器是 Laravel框架的核心,这篇文章讲讲 Laravel的 HTTP内核有的人可能会问到底哪个才是 Laravel的核心,实际上服务容器是一切的基础,框架中每时每刻都在用到它提供的依赖注入和控制反转的能力...Laravel 刚刚启动时先启动容器对象 Application,然后加载配置、通过 ServiceProvider往容器对象里填充一些对象为接下来处理请求做准备,但是真正干活的是 Kernel, Application...所以,依赖注入(IoC 容器) 是 Laravel 的基石,真正干活的是 Kernel。
我们可以看到IoC核心就是通过事先将一些代码片段注册到容器中,当我们需要实例化类的时候,通过容器,自动的将对象需要的参数实例化出来,并注入进去。 4....Laravel中的容器 Laravel中容器共有15个方法,简单分类了下 ?...Container 4.1 注册 4.1.1 bind 先来看下注册,Laravel的容器支持好多种注册方式,先看最常用的bind,其函数签名是: public function bind($abstract...); } $reflector = new ReflectionClass($concrete); 4.1.2 instance instance是将我们已经实例化出来的对象、文本等注册进入容器,使用方法如下...参考 laravel 学习笔记 —— 神奇的服务容器
上一篇文章我们介绍了Laravel的HTTP内核,详细概述了网络请求从进入应用到应用处理完请求返回HTTP响应整个生命周期中HTTP内核是如何调动Laravel各个核心组件来完成任务的。...php // 第一部分: 创建应用实例 $app = new Illuminate\Foundation\Application( realpath(__DIR__....执行命令类的 run方法来完成任务处理并返回状态码。 和命令行脚本的规范一样,如果执行命令任务程序成功会返回0, 抛出异常退出则返回1。...结束应用 执行完命令程序返回状态码后, 在 artisan中会直接通过 exit($status)函数输出状态码并结束PHP进程,接下来shell进程会根据返回的状态码是否为0来判断脚本命令是否执行成功...中定义的各种命令类程序中,然后在命令类里面我们就可以写其他程序一样自由地使用Laravel中的各个组件和注册到服务容器里的服务了。
/vendor/autoload.php'; 2.2 创建 Laravel 应用实例 创建应用实例(或称服务容器),由位于 bootstrap/app.php 文件里的引导程序完成,创建服务容器的过程即为应用初始化的过程...2.2.4 本节小结 通过上面的分析我们可以发现在「创建 Laravel 应用实例」这个阶段它做了很多的基础工作,包括但不限于:创建 APP 容器、注册应用路径、注册基础服务提供者、配置中间件和引导程序等...Laravel 请求实例。...还记得我们讲解「2.2 创建 Laravel 应用实例」章节的时候有「注册应用的基础路径并将路径绑定到 APP 容器」。...返回响应结果 <?
服务提供器是所有 Laravel 应用程序引导中心。...= true; public function register() { $this->app->singleton(BroadcastManager::class,...首先laravel注册和引导应用需要的服务是发生在寻找路由处理客户端请求之前的Bootstrap阶段的,在框架的入口文件里我们可以看到,框架在实例化了Application对象后从服务容器中解析出了HTTP...如果我们想使用服务容器解析自己定义或者第三方软件包的服务就需要通过服务提供器里使用服务容器的singleton、bind、alias方法注册到服务容器中去,这样才能用服务容器make解析出服务或者时直接用门面来访问服务里提供的方法...大家可以点击“阅读原文” 阅读关于Laravel服务提供器的源码分析。
服务提供者的功能是完成 Laravel 应用的引导启动,或者说是将 Laravel 中的各种服务「注册」到「Laravel 服务容器」,这样才能在后续处理 HTTP 请求时使用这些服务。...深入剖析 Laravel 服务容器,并且在文中「注册基础服务提供者」一节也有详细分析服务容器是如何注册服务提供者的。...如果你有了解过服务容器运行原理,就会知道在「绑定」操作仅仅是建立起接口和实现的对应关系,此时并不会创建具体的实例,即不会存在真实的依赖关系。...中间件及请求处理,生成响应并返回响应。...$bootstrapper, [$this]); // 从容器中解析出实例,然后调用实例的 bootstrap() 方法引导启动。
Laravel中的服务容器 我们已经了解了服务容器是个什么东西,也知道了依赖、依赖注入、控制反转以及最终的服务容器的概念和它们要解决的问题。...今天,我们就来一起学习一下 Laravel 中的服务容器是怎么使用的,大家一起来看看它是不是和我们上回学习到的服务容器是一样的。...使用 Laravel 中的服务容器 在 Laravel 中使用服务容器非常简单,我们首先还是定义那几个测试的类,不过这次我们把它们分开到不同的文件中存储。...bind() 就是直接绑定一个容器对象,和我们之前自己定义的那个容器类没什么太大的差别,而 instance() 就是绑定一个实例化对象。...接下来的 singleton() 从名字就可以看出,它绑定一个单例对象。 绑定完成之后,我们就可以使用 make() 方法来获得容器中的对象实例。
领取专属 10元无门槛券
手把手带您无忧上云