iquxbyte/container-di

一个简单的IoC容器,具有以下方法:bind,singleton,resolve,make。

0.0.1 2020-04-27 09:42 UTC

This package is not auto-updated.

Last update: 2024-09-25 05:24:24 UTC


README

一个简单的IoC容器,具有以下方法:bind,singleton,resolve,make。

安装

安装Composer

composer require iquxbyte/container-di

非Composer安装

仅下载此仓库,并包含 path/to/src/__autoload.php

使用

绑定

ContainerDI::bind(Foo::class);

单例

ContainerDI::singleton(FooBarContract::class, FooBar::class);

创建类

ContainerDI::make(FooBarContract::class, FooBar::class);

解析类

ContainerDI::make(Foo::class);

示例

<?php

use IquxByte\ContainerDI;

require_once '../src/__autoload.php';
require_once 'class.php';

/**
 * Simple bind class to container
 */
ContainerDI::bind(Foo::class);

/**
 * bind with custom name
 */
ContainerDI::bind('class.foo', Foo::class);

/**
 * use closure to bind
 */
ContainerDI::bind(Foo::class, function ($containerDI) {
    return new Foo;
});

/**
 * bind class with interface to container
 */
ContainerDI::bind(FooBarContract::class, FooBar::class);

/**
 * Get instance
 */
$instance = ContainerDI::make(FooBar::class);

/**
 * Get class from interface
 */
$instance = ContainerDI::make(FooBarContract::class);

/**
 * Singleton class to container
 */
ContainerDI::singleton(Bar::class);

/**
 * Test singleton
 * should be true
 */
var_dump(ContainerDI::make(Bar::class) === ContainerDI::make(Bar::class));

/**
 * Test bind
 * should be false
 */
var_dump(ContainerDI::make(FooBarContract::class) === ContainerDI::make(FooBarContract::class));