国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Laravel服務(wù)容器

oogh / 3296人閱讀

摘要:框架底層解析本文參考陳昊框架關(guān)鍵技術(shù)解析,搭建一個(gè)屬于自己的簡(jiǎn)化版服務(wù)容器。服務(wù)容器建立項(xiàng)目空文件夾如添加,執(zhí)行目的是為了學(xué)習(xí)利用的自動(dòng)加載。

laravel框架底層解析

本文參考陳昊《Laravel框架關(guān)鍵技術(shù)解析》,搭建一個(gè)屬于自己的簡(jiǎn)化版服務(wù)容器。
其中涉及到反射、自動(dòng)加載,還是需要去了解一下。

laravel服務(wù)容器

建立項(xiàng)目空文件夾(如 mylaravel)

添加composer.json,執(zhí)行composer install

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "autoload": {
        "classmap": [
        ],
        "psr-4": {
            "App": "app/"
        }
    }
}

目的是為了學(xué)習(xí)、利用composer的自動(dòng)加載。

文件路徑如下所示

mylaravel

app

Traveller

Traveller.php

Visit

Leg.php

Visit.php

Container.php

Index.php

vendor

composer.json

簡(jiǎn)化版Container.php

getClosure($abstract, $concrete);
        }
    
        $this->bindings[$abstract] = compact("concrete", "shared");
    
    }
    //默認(rèn)的回調(diào)函數(shù)
    protected function getClosure($abstract, $concrete)
    {
        //生成實(shí)例的回調(diào)函數(shù), $c一般為ioc容器對(duì)象
        return function($c) use ($abstract, $concrete)
        {
            $method = ($abstract == $concrete) ? "build" : "make";
            return $c->$method($concrete);
        };
    }
    //生成實(shí)例對(duì)象,首先解決接口和要實(shí)例化類之間的依賴
    public function make($abstract)
    {
        $concrete = $this->getConcrete($abstract);
        if ($this->isBuildable($concrete, $abstract)) {
            $object = $this->build($concrete);
        } else {
            $object = $this->make($concrete);
        }
        return $object;
    }
    protected function isBuildable($concrete, $abstract)
    {
        return $concrete === $abstract || $concrete instanceof Closure;
    }
    //獲取綁定的回調(diào)函數(shù)
    protected function getConcrete($abstract)
    {
        if ( ! isset($this->bindings[$abstract]))
        {
            return $abstract;
        }
        return $this->bindings[$abstract]["concrete"];
    }
    //實(shí)例化對(duì)象
    public function build($concrete)
    {
        if ($concrete instanceof Closure) {
            return $concrete($this);
        }
        $reflector = new ReflectionClass($concrete);
        if ( ! $reflector->isInstantiable()) {
            echo $message = "Target [$concrete] is not instantiable.";
        }
        $constructor = $reflector->getConstructor();
        if (is_null($constructor)) {
            return new $concrete;
        }
        $dependencies = $constructor->getParameters();
        $instances = $this->getDependencies($dependencies);
        return $reflector->newInstanceArgs($instances);
    }
    protected function getDependencies($parameters)
    {
        $dependencies = [];
        foreach ($parameters as $parameter)
        {
            $denpendency = $parameter->getClass();
            if (is_null($denpendency)) {
                $dependencies[] = NULL;
            } else {
                $dependencies[] = $this->resolveClass($parameter);
            }
        }
        return (array) $dependencies;
    }
    protected function resolveClass(ReflectionParameter $parameter)
    {
        return $this->make($parameter->getClass()->name);
    }
}

Visit.php接口


Leg.php接口的一種實(shí)現(xiàn)


Traveller.php相當(dāng)于Controller下的方法

trafficTool = $visit;
    }
    public function visitTibet()
    {
        $this->trafficTool->go();
    }
}

Index.php

bind("AppVisitVisit", "AppVisitLeg");
            $app->bind("Traveller", "AppTravellerTraveller");
            //通過(guò)容器實(shí)現(xiàn)依賴注入,完成類的實(shí)例化
            $tra = $app->make("AppTravellerTraveller");
            $tra->visitTibet();
    }
}

$b = new Index;
$b->index();

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/22433.html

相關(guān)文章

  • 深入剖析 Laravel 服務(wù)容器

    摘要:劃下重點(diǎn),服務(wù)容器是用于管理類的依賴和執(zhí)行依賴注入的工具。類的實(shí)例化及其依賴的注入,完全由服務(wù)容器自動(dòng)的去完成。 本文首發(fā)于 深入剖析 Laravel 服務(wù)容器,轉(zhuǎn)載請(qǐng)注明出處。喜歡的朋友不要吝嗇你們的贊同,謝謝。 之前在 深度挖掘 Laravel 生命周期 一文中,我們有去探究 Laravel 究竟是如何接收 HTTP 請(qǐng)求,又是如何生成響應(yīng)并最終呈現(xiàn)給用戶的工作原理。 本章將帶領(lǐng)大...

    abson 評(píng)論0 收藏0
  • Laravel思維導(dǎo)圖之Laravel核心概念

    摘要:的核心概念包括服務(wù)容器服務(wù)提供者門面契約。所有服務(wù)提供者都需要繼承類??梢詾榉?wù)提供者的方法設(shè)置類型提示。方法將在所有其他服務(wù)提供者均已注冊(cè)之后調(diào)用。同樣會(huì)整理成思維導(dǎo)圖的形式以方便記憶與回顧。 showImg(https://segmentfault.com/img/remote/1460000010771201); Laravel 的核心概念包括:服務(wù)容器、服務(wù)提供者、門面(Fac...

    wthee 評(píng)論0 收藏0
  • 使用 Laravel 服務(wù)容器的優(yōu)勢(shì)

    摘要:理解服務(wù)容器的概念,對(duì)于我們使用太重要了,應(yīng)該說(shuō)是否理解服務(wù)容器的概念是區(qū)分是否入門的重要條件。因?yàn)檎麄€(gè)框架正是在服務(wù)容器這一基礎(chǔ)上構(gòu)建起來(lái)的。 本篇文章轉(zhuǎn)載自我的個(gè)人博客原文地址SampsonBlog 如果說(shuō)laravel框架的核心是什么,那么無(wú)疑是服務(wù)容器。理解服務(wù)容器的概念,對(duì)于我們使用laravel太重要了,應(yīng)該說(shuō)是否理解服務(wù)容器的概念是區(qū)分是否入門laravel的重要條件。因...

    jeffrey_up 評(píng)論0 收藏0
  • 在 Docker 中運(yùn)行 Laravel 項(xiàng)目

    摘要:本篇承接使用構(gòu)建環(huán)境,介紹如何在該文所用的容器中運(yùn)行項(xiàng)目。接下來(lái)可以新建一個(gè)項(xiàng)目或是通過(guò)轉(zhuǎn)移項(xiàng)目。從上同步項(xiàng)目一般服務(wù)器中運(yùn)行的項(xiàng)目都是在本地開發(fā)完成后同步上去的。生成文件文件含有項(xiàng)目所需的配置以及用于加密解密的隨機(jī)字符串。 本篇承接 使用 Docker 構(gòu)建 LNMP 環(huán)境,介紹如何在該文所用的容器中運(yùn)行 Laravel 項(xiàng)目。主要步驟為:轉(zhuǎn)移 Laravel 項(xiàng)目到數(shù)據(jù)卷 => 配...

    luxixing 評(píng)論0 收藏0
  • PHPer面試指南-Laravel

    摘要:簡(jiǎn)述的生命周期采用了單一入口模式,應(yīng)用的所有請(qǐng)求入口都是文件。分發(fā)請(qǐng)求一旦應(yīng)用完成引導(dǎo)和所有服務(wù)提供者都注冊(cè)完成,將會(huì)移交給路由進(jìn)行分發(fā)。此外,由于對(duì)動(dòng)態(tài)方法的獨(dú)特用法,也使測(cè)試起來(lái)非常容易。 本書的 GitHub 地址:https://github.com/todayqq/PH... Laravel 作為現(xiàn)在最流行的 PHP 框架,其中的知識(shí)較多,所以單獨(dú)拿出來(lái)寫一篇。 簡(jiǎn)述 La...

    alaege 評(píng)論0 收藏0
  • Laravel修煉:服務(wù)容器綁定與解析

    摘要:用匿名函數(shù)的好處在于,這個(gè)服務(wù)綁定到容器以后,并不會(huì)立即產(chǎn)生服務(wù)最終的對(duì)象,只有在這個(gè)服務(wù)解析的時(shí)候,匿名函數(shù)才會(huì)執(zhí)行,此時(shí)才會(huì)產(chǎn)生這個(gè)服務(wù)對(duì)應(yīng)的服務(wù)實(shí)例。 前言 ? 老實(shí)說(shuō),第一次老大讓我看laravel框架手冊(cè)的那天早上,我是很絕望的,因?yàn)檎娴臎]接觸過(guò),對(duì)我這種渣渣來(lái)說(shuō),laravel的入門門檻確實(shí)有點(diǎn)高了,但還是得硬著頭皮看下去(雖然到現(xiàn)在我還有很多沒看懂,也沒用過(guò))。? 后面慢...

    The question 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<