Class yii\di\Instance

继承yii\di\Instance
可用自版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/di/Instance.php

实例(Instance)表示对依赖项注入(DI)容器或服务定位器中的命名对象的引用.

你可以使用 get() 来获取由 $id 引用的实际对象.

实例(Instance)主要用在两个地方:

  • 再配置依赖项注入(DI)容器时, 可以使用实例(Instance)来引用类名称, 接口名称或别名. 该引用稍后可以通过容器解析为实际对象.
  • 在使用服务定位器获取依赖对象的类中.

以下示例显示如何使用实例(Instance)配置依赖注入(DI)容器:

$container = new \yii\di\Container;
$container->set('cache', [
    'class' => 'yii\caching\DbCache',
    'db' => Instance::of('db')
]);
$container->set('db', [
    'class' => 'yii\db\Connection',
    'dsn' => 'sqlite:path/to/file.db',
]);

以下示例显示了一个类如何从服务定位器中检索组件:

class DbCache extends Cache
{
    public $db = 'db';

    public function init()
    {
        parent::init();
        $this->db = Instance::ensure($this->db, 'yii\db\Connection');
    }
}

公共属性

隐藏继承的属性

属性类型描述定义在
$id string 组件(component)ID, 类名称, 接口名称或别名. yii\di\Instance
$optional boolean 如果应该返回null而不是引发异常. yii\di\Instance

公共方法

隐藏继承的方法

方法描述定义在
__set_state() 在使用var_export()之后恢复类的状态. yii\di\Instance
ensure() 将指定的引用解析为实际(Instance)对象, 并确保它是指定的类型. yii\di\Instance
get() 返回此实例(Instance)对象引用的实际对象. yii\di\Instance
of() 创建一个新的实例(Instance)对象. yii\di\Instance

受保护的方法

隐藏继承的方法

方法描述定义在
__construct() 构造函数. yii\di\Instance

属性详情

$id public 属性

组件(component)ID, 类名称, 接口名称或别名.

public string $id null
$optional public 属性

如果应该返回null而不是引发异常.

public boolean $optional null

方法详情

__construct() protected 方法

构造函数.

protected void __construct ( $id, $optional false )
$id string

组件(component)ID.

$optional boolean

如果应该返回null而不是引发异常.

__set_state() public static 方法 (可用自版本: 2.0.12)

在使用var_export()之后恢复类的状态.

参见 var_export().

public static yii\di\Instance __set_state ( $state )
$state array
throws yii\base\InvalidConfigException

$state属性不包含id参数时.

ensure() public static 方法

将指定的引用解析为实际(Instance)对象, 并确保它是指定的类型.

该引用可以指定为字符串或实例(Instance)对象. 如果是前者, 它将被视为组件(component)ID, 类/接口名称或别名, 具体取决于容器类型.

如果未指定容器, 则该方法将首先尝试Yii::$app, 然后尝试Yii::$container.

例如:

use yii\db\Connection;

// returns Yii::$app->db
$db = Instance::ensure('db', Connection::className());
// 使用给定的配置返回 Connection 的实例
$db = Instance::ensure(['dsn' => 'sqlite:path/to/my.db'], Connection::className());
public static object ensure ( $reference, $type null, $container null )
$reference object|string|array|static

对象或对所需对象的引用. 你可以根据组件(component)ID或实例对象指定引用. 从版本 2.0.2 开始, 你也可以传入用于创建对象的配置数组. 如果在配置数组中未指定class值, 则它将使用$type的值.

$type string

要检查的类/接口名称. 如果为null, 则不执行类型检查.

$container yii\di\ServiceLocator|yii\di\Container

容器. 这将传递给 get().

return object

实例(Instance)引用的对象, 或者如果它是一个对象, 则返回$reference本身.

throws yii\base\InvalidConfigException

如果$reference无效.

get() public 方法

返回此实例(Instance)对象引用的实际对象.

public object get ( $container null )
$container yii\di\ServiceLocator|yii\di\Container

用于查找引用对象的容器. 如果为null, 该方法将首先尝试Yii::$app, 然后再尝试Yii::$container.

return object

此实例(Instance)对象引用的实际对象.

of() public static 方法

创建一个新的实例(Instance)对象.

public static yii\di\Instance of ( $id, $optional false )
$id string

组件(component)ID.

$optional boolean

如果应该返回null而不是引发异常.

return yii\di\Instance

新的实例(Instance)对象.