Laravel 原始碼筆記 框架契約類之 ContainerContract

php_yt發表於2020-03-03

這一節是 laravel 框架 容器 Container 的 Interface 介面類 Illuminate\Contracts\Container\Container

它在 psr 標準容器通用介面 psr/container 的基礎上擴充套件功能。

psr 標準 容器通用介面

psr/container
或許是開源協議,它規定了容器標準介面以及異常標準介面。
MT6LOYKGQ9.png!large

namespace Psr\Container;
//描述一個容器讀取其條目的通用方法的介面。
interface ContainerInterface{
    /**
     * 根據容器的識別符號查詢容器的項並返回它.
     * @param string $id 要查詢的項的識別符號.
     *
     * @throws NotFoundExceptionInterface 沒有找到該識別符號的項.
     * @throws ContainerExceptionInterface 檢索條目時出錯.
     *
     * @return mixed Entry.
     */
    public function get($id);

    /**
     * 如果容器可以返回給定識別符號的條目,則返回true.否則返回false.
     *
     * `has($id)` 返回 true 並不意味著 `get($id)` 將不會丟擲異常.
     * 但這意味著' get($id) '不會丟擲' NotFoundExceptionInterface.
     *
     * @param string $id 要查詢的項的識別符號.
     *
     * @return bool
     */
    public function has($id);
}

laravel 框架容器介面

框架容器介面
Illuminate\Contracts\Container\Container 檢視命名
擴充套件
psr 通用容器介面 psr/container

如果說 psr 通用介面是廣義上的容器基本功能,那麼框架介面類則是 laravel 框架獨有的容器基本功能。

psr/container psr 通用容器介面
︿ Illuminate\Contracts\Container\Container laravel 框架容器介面

<?php
namespace Illuminate\Contracts\Container;

use Closure;
use Psr\Container\ContainerInterface;

interface Container extends ContainerInterface
{
    // abstract 抽象類;concrete 具體的實現類;instance 例項;closure 閉包;resolve 解析;
    // 為查詢方便 a-z排列

    //將型別別名化為另一個名稱
    public function alias($abstract, $alias);
    //在解析回撥之後註冊一個新的
    public function afterResolving($abstract, Closure $callback = null);
    //確定給定的抽象型別是否已被繫結。
    public function bound($abstract);
    //向容器註冊繫結
    public function bind($abstract, $concrete = null, $shared = false);
    //如果繫結尚未註冊,則註冊它
    public function bindIf($abstract, $concrete = null, $shared = false);
    //呼叫給定的閉包 / class@method and 注入它的依賴
    public function call($callback, array $parameters = [], $defaultMethod = null);
    //“擴充套件”容器中的抽象型別
    public function extend($abstract, Closure $closure);
    //獲取一個閉包來從容器中解析給定的型別
    public function factory($abstract);
    //在容器中註冊一個共享的現有例項
    public function instance($abstract, $instance);
    //從容器中解析給定型別
    public function make($abstract, array $parameters = []);
    //確定給定的抽象型別是否已解析
    public function resolved($abstract);
    //註冊一個新的解析回撥
    public function resolving($abstract, Closure $callback = null);
    //在容器中註冊一個共享繫結
    public function singleton($abstract, $concrete = null);
    //將一組標記分配給給定的繫結
    public function tag($abstracts, $tags);
    //解析給定標記的所有繫結
    public function tagged($tag);
    //定義上下文繫結
    public function when($concrete);
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章