carloswph / mainframe
提供了一个容器,在其中可以推送对象,然后提供了一个接口来调用队列中对象内部的方法,并按顺序执行。
v1.0.0
2021-04-02 10:25 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能够接受此类中存在的任何方法。然而,为了使其更容易,将为管理注入对象创建额外的别名。