mkgor/simple-di

PHP 上的简单依赖注入容器实现

安装: 0

依赖者: 0

建议者: 0

安全: 0

星星: 0

关注者: 2

分支: 0

开放问题: 0

类型:项目

dev-master 2020-06-04 09:14 UTC

This package is auto-updated.

Last update: 2024-09-04 18:21:36 UTC


README

SimpleDI 是一个轻量级、易于使用的 PHP 依赖注入容器。

安装

您可以通过 composer 安装 SimpleDI

composer require mkgor/simple-di

这就完成了!您现在就可以使用它了,因为它只需要一点配置就能提供 DIC 的基本功能

如何使用它?

只需调用 $container->get() 方法,它将解析指定类的所有依赖并返回给您!

SomeDependency.php

<?php

class SomeDependency {
    public $anotherDependency;

	public function __construct(AnotherDependency $b) {
		$this->anotherDependency = $b;
	}
}

AnotherDependency.php

<?php

class AnotherDependency {
	public function sayHello() {
		echo "Hello from AnotherDependency";
	}
}

test.php

<?php

require "vendor/autoload.php";

$container = new \SimpleDI\Container(__DIR__ . '/config.php');

//Output: Hello from AnotherDependency
$container->get(SomeDependency::class)->anotherDependency->sayHello();

config.php

<?php

return [
    'singleton' => [],
    'definition' => [],
];

通过别名获取类

您可以为某个类指定别名,然后使用 SimpleDI 通过该别名调用它

<?php

return [
    'singleton' => [],

    'definition' => [
        'aliasName' => [
            'classname' => SomeClass::class,
            'arguments' => []
        ]
    ],
];
<?php

require "vendor/autoload.php";

$container = new \SimpleDI\Container(__DIR__ . '/config.php');

/** @var SomeClass $someClass */
$someClass = $container->get('aliasName');

声明单例

如果您有一些在请求生命周期内只创建一次的类,您可以在配置中将其声明为单例。SimpleDI 将一次性创建其实例并将其保存到单例容器中

<?php

return [
    'singleton' => [
        'aliasForSingleton' => [
            'classname' => SomeSingleton::class,
            'arguments' => []
        ]
    ],

    'definition' => []
];
<?php

require "vendor/autoload.php";

$container = new \SimpleDI\Container(__DIR__ . '/config.php');

/** @var SomeSingleton $someClass */
$someClass = $container->get('aliasForSingleton');
$someClass->a = 4;

// Output: 4
echo $someClass->a;

$someClass2 = $container->get('aliasForSingleton');

// Output: 4
echo $someClass2->a;