每天laravel-20160812| Container -15

/**
 * Resolve the given type from the container.
 *
 * @param  string  $abstract
 * @param  array   $parameters
 * @return mixed
 */
 // get the given type from the container
public function make($abstract, array $parameters = [])
{// this function name "make" like compile c file to binary file in the linux
    $abstract = $this->getAlias($this->normalize($abstract));
    // first get the alias as the new name

    // If an instance of the type is currently being managed as a singleton we‘ll
    // just return an existing instance instead of instantiating new instances
    // so the developer can keep using the same objects instance every time.
    if (isset($this->instances[$abstract])) {
        return $this->instances[$abstract];
    }// like normal method
 // if it is exist ,we will return it, that ok;

    $concrete = $this->getConcrete($abstract);// concrete like create it done

    // We‘re ready to instantiate an instance of the concrete type registered for
    // the binding. This will instantiate the types, as well as resolve any of
    // its "nested" dependencies recursively until all have gotten resolved.
    if ($this->isBuildable($concrete, $abstract)) {// isBuildable
        $object = $this->build($concrete, $parameters);// check it is can be Builda
    } else {
        $object = $this->make($concrete, $parameters);
    }

    // If we defined any extenders for this type, we‘ll need to spin through them
    // and apply them to the object being built. This allows for the extension
    // of services, such as changing configuration or decorating the object.
    foreach ($this->getExtenders($abstract) as $extender) {
        $object = $extender($object, $this);
    }// to though , a extender done is too trouble

    // If the requested type is registered as a singleton we‘ll want to cache off
    // the instances in "memory" so we can return it later without creating an
    // entirely new instance of an object on each subsequent request for it.
    if ($this->isShared($abstract)) {
        $this->instances[$abstract] = $object;
    }// get the instance from the "memory"

    $this->fireResolvingCallbacks($abstract, $object);

    $this->resolved[$abstract] = true;

    return $object;
}// in the last we will found it is a compatible way to get you want object.

/**
 * Get the concrete type for a given abstract.
 *
 * @param  string  $abstract
 * @return mixed   $concrete
 */
protected function getConcrete($abstract)
{// get a Concrete type for a abstract
    if (! is_null($concrete = $this->getContextualConcrete($abstract))) {
        return $concrete;
    }// if you can get it ,then return it
 // otherwise see next

    // If we don‘t have a registered resolver or concrete for the type, we‘ll just
    // assume each type is a concrete name and will attempt to resolve it as is
    // since the container should be able to resolve concretes automatically.
    if (! isset($this->bindings[$abstract])) {
        return $abstract;
    }// return it back

    return $this->bindings[$abstract][‘concrete‘];
}//last we will binding it
时间: 2024-11-08 21:50:25

每天laravel-20160812| Container -15的相关文章

laravel容器container 阅读记录

今天抽时间又仔细看了一下laravel的container,记录一下. 所谓容器,听名字就知道,是一个仓库,装东西用的,所以,container所有的功能,都围绕一个主题:管理装. 类名称:Illuminate\Container\Container 首先,生成一个数组绑定列表,用自定义名称作为主键,然后键值是闭包(输入的可能是闭包或者实体类,但是,在存储的时候,都统一转化成了闭包存储). 其次,根据绑定列表,生成对应的类的实例,供用户使用,调用的时候,发现如果已经生成,不需要重新生成使用,实际

[转载]Laravel Container (容器) 深入理解 (下)

本文大部分翻译自 DAVE JAMES MILLER 的 <Laravel's Dependency Injection Container in Depth> . 上文介绍了 Dependency Injection Containers (容器) 的基本概念,现在接着深入讲解 Laravel 的 Container. Laravel 中实现的 Inversion of Control (IoC) / Dependency Injection (DI) Container 非常强悍,但文档中

laravel 入门

Laravel5.0学习--01 入门 本文以laravel5.0.22为例. 生产环境建议使用laravel5.1版本,因为该版本是长期支持版本.5.1文档更详细:http://laravel-china.org/docs/5.1. 环境需求 Laravel5.0 框架有一些系统上的需求: PHP 版本 >= 5.4 Mcrypt PHP 扩展 OpenSSL PHP 扩展 Mbstring PHP 扩展 Tokenizer PHP 扩展 在 PHP 5.5 之后, 有些操作系统需要手动安装

在window下配置laravel开发环境

1.由于有一点php基础,所以非常想更进一步,就选择据说在国外最流行的php框架来学习了,laravel框架,官网上介绍是为艺术而生,从知乎和一些论坛上看到,laravel学起来并不简单,首先配置问题,就难倒了很多入门者. 和所有入门者一样,我在laravel的配置上也花费了好长时间,才配置完成.废话少说,直接开始说一下我的配置经验,我选择的是最简单的,不使用Composer来安装,而是直接使用官网上已经继承的安装包来安装,下载地址 http://down.golaravel.com/larav

安装 Laravel 遇到问题?你需要更新 composer.json 文件

<pre class="markdown-doc"> ~~~ url 转载自 https://9iphp.com/web/laravel/laravel-install-fail-update-composer.html~~~在使用最新版 Composer 安装 Laravel 的时候,你可能会遇到下面的问题而安装失败: ~~~ shell$ php composer.phar create-project --prefer-dist laravel/laravel blo

Autofac Container 的简单的封装重构

为了使用方便,对Autofac container的简单封装,记录如下,备以后用或分享给大家,欢迎讨论! 1 using Autofac; 2 using Autofac.Core.Lifetime; 3 using Autofac.Integration.Mvc; 4 5 public static class ContainerManager 6 { 7 private static IContainer _container; 8 9 public static void SetConta

angularjs--ng-repeat

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> 6 <ti

angularjs表达式

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> 6 <ti

ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点

在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity Framework的背景信息,然后再详细学习如何搭建开发环境. 1.1 MVC和ASP.NET MVC 这本书涵盖Microsoft版本的MVC,即ASP.NET MVC.在写本书的时候,ASP.NET MVC的生产版本为MVC5,因此,本书的示例代码都使用ASP.NET MVC 5编写.在本书中