没有命名空间的类 yii yii\base yii\behaviors yii\caching yii\captcha yii\console yii\console\controllers yii\console\widgets yii\data yii\db yii\db\conditions yii\db\cubrid yii\db\cubrid\conditions yii\db\mssql yii\db\mssql\conditions yii\db\mysql yii\db\oci yii\db\oci\conditions yii\db\pgsql yii\db\sqlite yii\db\sqlite\conditions yii\di yii\filters yii\filters\auth yii\grid yii\helpers yii\i18n yii\log yii\mail yii\mutex yii\rbac yii\rest yii\test yii\validators yii\web yii\widgets

Class yii\di\Instance

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

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

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

实例主要用于两个地方:

  • 配置依赖注入容器时,你使用实例引用类名,接口名或别名。 接口名或别名。稍后可以通过容器将引用解析为实际对象。
  • 在使用服务定位器来获取依赖对象的类中。

下面的示例演示了如何通过实例配置 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 组件 ID,类名,接口名或别名 yii\di\Instance

公共方法

隐藏继承的方法

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

受保护的方法

隐藏继承的方法

方法描述被定义在
__construct() Constructor. yii\di\Instance

属性详情

$id 公共 属性

组件 ID,类名,接口名或别名

public string $id null

方法详情

__construct() 受保护 方法

Constructor.

protected void __construct($id)
$id string

组件 ID

__set_state() 公共 静态 方法 (自版本 2.0.12 可用)

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

参见 \yii\di\var_export().

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

当 $state 属性不包含 id 参数抛出的异常

ensure() 公共 静态 方法

将指定的引用解析为实际对象,并确保它具有指定的类型。

可以将引用指定为字符串或实例对象。 如果是前者,它将会被视为组件 ID,类/接口名或别名,这将根据容器类型决定。

如果你没有指定容器,该方法首先将会尝试 Yii::$app 然后是 Yii::$container

例如,

use yii\db\Connection;

// 返回 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

对象或对所需对象的引用。 你可以根据组件 ID 或实例对象指定引用。 从 2.0.2 版本开始,你可以通过配置数组去创建一个对象。 如果在配置数组中没有指定 "class" 的值,将会使用 $type 的值。

$type string

要检查的类/借口名称。如果为空,类型检查将不会被执行。

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

容器。将传递给 get()

return object

实例引用的对象,如果为一个对象,则表示 $reference 本身。

throws yii\base\InvalidConfigException

如果引用无效抛出的异常

get() 公共 方法

返回实例对象引用的实际对象。

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

用于定位引用对象的容器。 如果为空,该方法首先将尝试 Yii::$app 然后是 Yii::$container

return object

实例对象引用的实际对象。

of() 公共 静态 方法

创建一个新的实例对象。

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

组件 ID

return yii\di\Instance

新的实例对象。