用簡單的方式解釋 [服務容器 門臉 契約]

lyxxxh發表於2019-08-19

服務容器繫結

$this->app->bind('hello', function ($app) {
    return "world";
});

$this->app->bind('hello\two', function ($app) {
    return App\Models\User();
});
    echo resolve('hello');
    resolve('hello\two')::find(1);

resolve傳入名字,就可以解析裡面的閉包。
輸出world 和 查詢id=1的使用者。

門面


class Log extends Facade
{
    //laravel日誌門面的原始碼
    protected static function getFacadeAccessor()
    {


        return 'hello\two'; 
//      return 'log';
    }
}
 Log::find(1);resolve('hello\two')::find(1);沒什麼區別
 很容易懂。

契約

新建一個App\Models\UserInterface.php


<?php
namespace App\Models;
interface UserInterface{ }

介面繫結

$this->app->bind(
    'App\Models\UserInterface',
    'App\Models\User'
);

在控制器使用


public function __construct(App\Models\UserInterface $user)
{
    $user->find(1);

}

User::find(1); resolve('hello\two')::find(1) Log::find(1) $user->find(1)
都是一樣的 花式查詢1號使用者

契約作用

$this->app->bind(
    'App\Models\UserInterface',
   // 'App\Models\User',      這個表的設計賊坑 不要用
    'App\Models\UserNew'   //新表
);

這個時候使用App\Models\UserInterface會相當於App\Models\UserNew

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章