欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

laravel的核心實(shí)例分析

本文小編為大家詳細(xì)介紹“l(fā)aravel的核心實(shí)例分析”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“l(fā)aravel的核心實(shí)例分析”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

創(chuàng)新互聯(lián)長(zhǎng)期為上千多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為五寨企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)站制作五寨網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

laravel的核心是服務(wù)容器,也就是IOC容器。該容器提供了整個(gè)框架中需要的一系列服務(wù),其中包含了依賴注入和控制反轉(zhuǎn)兩部分,控制反轉(zhuǎn)是面向?qū)ο缶幊讨械囊环N設(shè)計(jì)原則,可以用來(lái)減低計(jì)算機(jī)代碼之間的耦合度。

本文操作環(huán)境:Windows10系統(tǒng)、Laravel6版、Dell G3電腦。

laravel的核心

服務(wù)容器,也叫IOC容器,其實(shí)包含了依賴注入(DI)和控制反轉(zhuǎn)(IOC)兩部分,是laravel的真正核心。其他的各種功能模塊比如 Route(路由)、Eloquent ORM(數(shù)據(jù)庫(kù) ORM 組件)、Request and Response(請(qǐng)求和響應(yīng))等等等等,實(shí)際上都是與核心無(wú)關(guān)的類模塊提供的,這些類從注冊(cè)到實(shí)例化,最終被你所使用,其實(shí)都是 laravel 的服務(wù)容器負(fù)責(zé)的。服務(wù)容器這個(gè)概念比較難解釋清楚,只能一步步從服務(wù)容器的產(chǎn)生歷史慢慢解釋

該容器提供了整個(gè)框架中需要的一系列服務(wù)。

IoC 容器誕生的故事——石器時(shí)代(原始模式)

我們把一個(gè)“超人”作為一個(gè)類,

class Superman {}

我們可以想象,一個(gè)超人誕生的時(shí)候肯定擁有至少一個(gè)超能力,這個(gè)超能力也可以抽象為一個(gè)對(duì)象,為這個(gè)對(duì)象定義一個(gè)描述他的類吧。一個(gè)超能力肯定有多種屬性、(操作)方法,這個(gè)盡情的想象,但是目前我們先大致定義一個(gè)只有屬性的“超能力”,至于能干啥,我們以后再豐富:

class Power {
    /**
     * 能力值
     */
    protected $ability;
    /**
     * 能力范圍或距離
     */
    protected $range;
    public function __construct($ability, $range)
    {
        $this->ability = $ability;
        $this->range = $range;
    }
}

這時(shí)候我們回過(guò)頭,修改一下之前的“超人”類,讓一個(gè)“超人”創(chuàng)建的時(shí)候被賦予一個(gè)超能力:

class Superman
{
    protected $power;
    public function __construct()
    {
        $this->power = new Power(999, 100);
    }
}

這樣的話,當(dāng)我們創(chuàng)建一個(gè)“超人”實(shí)例的時(shí)候,同時(shí)也創(chuàng)建了一個(gè)“超能力”的實(shí)例,但是,我們看到了一點(diǎn),“超人”和“超能力”之間不可避免的產(chǎn)生了一個(gè)依賴。

所謂“依賴”,就是“我若依賴你,少了你就沒(méi)有我”。

在一個(gè)貫徹面向?qū)ο缶幊痰捻?xiàng)目中,這樣的依賴隨處可見(jiàn)。少量的依賴并不會(huì)有太過(guò)直觀的影響,我們隨著這個(gè)例子逐漸鋪開(kāi),讓大家慢慢意識(shí)到,當(dāng)依賴達(dá)到一個(gè)量級(jí)時(shí),是怎樣一番噩夢(mèng)般的體驗(yàn)。當(dāng)然,我也會(huì)自然而然的講述如何解決問(wèn)題。

之前的例子中,超能力類實(shí)例化后是一個(gè)具體的超能力,但是我們知道,超人的超能力是多元化的,每種超能力的方法、屬性都有不小的差異,沒(méi)法通過(guò)一種類描述完全。我們現(xiàn)在進(jìn)行修改,我們假設(shè)超人可以有以下多種超能力:

飛行,屬性有:飛行速度、持續(xù)飛行時(shí)間

蠻力,屬性有:力量值

能量彈,屬性有:傷害值、射擊距離、同時(shí)射擊個(gè)數(shù)

我們創(chuàng)建了如下類:

class Flight
{
    protected $speed;
    protected $holdtime;
    public function __construct($speed, $holdtime) {}
}
class Force
{
    protected $force;
    public function __construct($force) {}
}
class Shot
{
    protected $atk;
    protected $range;
    protected $limit;
    public function __construct($atk, $range, $limit) {}
}

好了,這下我們的超人有點(diǎn)“忙”了。在超人初始化的時(shí)候,我們會(huì)根據(jù)需要來(lái)實(shí)例化其擁有的超能力嗎,大致如下:

class Superman
{
    protected $power;
    public function __construct()
    {
        $this->power = new Fight(9, 100);
        // $this->power = new Force(45);
        // $this->power = new Shot(99, 50, 2);
        /*
        $this->power = array(
            new Force(45),
            new Shot(99, 50, 2)
        );
        */
    }
}

我們需要自己手動(dòng)的在構(gòu)造函數(shù)內(nèi)(或者其他方法里)實(shí)例化一系列需要的類,這樣并不好。可以想象,假如需求變更(不同的怪物橫行地球),需要更多的有針對(duì)性的 新的 超能力,或者需要 變更 超能力的方法,我們必須 重新改造 超人。換句話說(shuō)就是,改變超能力的同時(shí),我還得重新制造個(gè)超人。效率太低了!新超人還沒(méi)創(chuàng)造完成世界早已被毀滅。

這時(shí),靈機(jī)一動(dòng)的人想到:為什么不可以這樣呢?超人的能力可以被隨時(shí)更換,只需要添加或者更新一個(gè)芯片或者其他裝置啥的(想到鋼鐵俠沒(méi))。這樣的話就不要整個(gè)重新來(lái)過(guò)了。

IoC 容器誕生的故事——青銅時(shí)代(工廠模式)

我們不應(yīng)該手動(dòng)在 “超人” 類中固化了他的 “超能力” 初始化的行為,而轉(zhuǎn)由外部負(fù)責(zé),由外部創(chuàng)造超能力模組、裝置或者芯片等(我們后面統(tǒng)一稱為 “模組”),植入超人體內(nèi)的某一個(gè)接口,這個(gè)接口是一個(gè)既定的,只要這個(gè) “模組” 滿足這個(gè)接口的裝置都可以被超人所利用,可以提升、增加超人的某一種能力。這種由外部負(fù)責(zé)其依賴需求的行為,我們可以稱其為 “控制反轉(zhuǎn)(IoC)”。

工廠模式,顧名思義,就是一個(gè)類所以依賴的外部事物的實(shí)例,都可以被一個(gè)或多個(gè) “工廠” 創(chuàng)建的這樣一種開(kāi)發(fā)模式,就是 “工廠模式”。

我們?yōu)榱私o超人制造超能力模組,我們創(chuàng)建了一個(gè)工廠,它可以制造各種各樣的模組,且僅需要通過(guò)一個(gè)方法:

class SuperModuleFactory
{
    public function makeModule($moduleName, $options)
    {
        switch ($moduleName) {
            case 'Fight':     return new Fight($options[0], $options[1]);
            case 'Force':     return new Force($options[0]);
            case 'Shot':     return new Shot($options[0], $options[1], $options[2]);
        }
    }
}

這時(shí)候,超人 創(chuàng)建之初就可以使用這個(gè)工廠!

class Superman
{
    protected $power;
    public function __construct()
    {
        // 初始化工廠
        $factory = new SuperModuleFactory;
        // 通過(guò)工廠提供的方法制造需要的模塊
        $this->power = $factory->makeModule('Fight', [9, 100]);
        // $this->power = $factory->makeModule('Force', [45]);
        // $this->power = $factory->makeModule('Shot', [99, 50, 2]);
        /*
        $this->power = array(
            $factory->makeModule('Force', [45]),
            $factory->makeModule('Shot', [99, 50, 2])
        );
        */
    }
}

可以看得出,我們不再需要在超人初始化之初,去初始化許多第三方類,只需初始化一個(gè)工廠類,即可滿足需求。但這樣似乎和以前區(qū)別不大,只是沒(méi)有那么多 new 關(guān)鍵字。其實(shí)我們稍微改造一下這個(gè)類,你就明白,工廠類的真正意義和價(jià)值了。

class Superman
{
    protected $power;
    public function __construct(array $modules)
    {
        // 初始化工廠
        $factory = new SuperModuleFactory;
        // 通過(guò)工廠提供的方法制造需要的模塊
        foreach ($modules as $moduleName => $moduleOptions) {
            $this->power[] = $factory->makeModule($moduleName, $moduleOptions);
        }
    }
}
// 創(chuàng)建超人
$superman = new Superman([
    'Fight' => [9, 100],
    'Shot' => [99, 50, 2]
    ]);

現(xiàn)在修改的結(jié)果令人滿意。現(xiàn)在,“超人” 的創(chuàng)建不再依賴任何一個(gè) “超能力” 的類,我們?nèi)缛粜薷牧嘶蛘咴黾恿诵碌某芰Γ恍枰槍?duì)修改 SuperModuleFactory 即可。

讀到這里,這篇“l(fā)aravel的核心實(shí)例分析”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

新聞名稱:laravel的核心實(shí)例分析
文章出自:http://www.chinadenli.net/article16/piiogg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作用戶體驗(yàn)自適應(yīng)網(wǎng)站移動(dòng)網(wǎng)站建設(shè)App開(kāi)發(fā)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作