服務容器繫結
$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 協議》,轉載必須註明作者和本文連結