carloswph/mainframe

提供了一个容器,在其中可以推送对象,然后提供了一个接口来调用队列中对象内部的方法,并按顺序执行。

v1.0.0 2021-04-02 10:25 UTC

This package is auto-updated.

Last update: 2024-09-20 06:52:07 UTC


README

这是一个致命的简单对象容器实验,可以直接通过容器调用注入对象中存在的任何方法。如果有多个对象具有被调用的函数,则所有这些对象都会被执行。如果没有找到方法,则容器将忽略调用。

安装

像往常一样,我们更喜欢使用Composer来管理依赖项,因此可以使用以下命令安装此包:composer require carloswph/mainframe

使用方法

使用Mainframe实际上非常简单。让我们假设我们有两个类A和B,并希望将它们注入到容器中。注入可以在容器实例化期间或之后通过使用add()方法进行,如下所示。

use Mainframe\Container;

require __DIR__ . '/vendor/autoload.php';

class A
{
	public function __construct() {}

	public function print($string)
	{
		echo $string;
	}

	public function method()
	{
		echo 'C';
	}
}

class B
{
	public function __construct() {}

	public function print()
	{
		echo 'B';
	}

	public function load()
	{
		echo 'Do something';
	}
}

$container = new Container(['class_a' => new A()]); // Class A instance injected as Container array
$container->add('class_b', new B()); // Class B instance being injected after instantiation, through add()

为了控制对象,所有注入的对象都必须有一个键。这将允许Mainframe使用反射收集和检索它们的所有方法,这将生成一个数据库,其中存储了对象和方法名称,以便稍后调用。现在我们有两个对象在容器中,我们可以通过容器直接使用它们的所有方法。

此外,您还可以使用虚拟方法terminal($key, $methodName, $args)专门针对特定实例中的特定方法。

$container->print(); // Calls only class B print()
$container->print('Test'); // Calls both class A and B print() methods
$container->method(); // Calls class A method()
$container->terminal('class_a', 'print', 'Test'); // Calls specifically class A print() and pass 'Test' as argument

更多

作为PHP的ArrayObject类的扩展,Mainframe能够接受此类中存在的任何方法。然而,为了使其更容易,将为管理注入对象创建额外的别名。