public function testS() { $container = new Container(); $closure = function () { return ['$CLOSURE', func_get_args()]; }; // closure $result = $container->call($closure, ['param1', 'param2']); static::assertEquals(['$CLOSURE', ['param1', 'param2']], $result); // function $result = $container->call(__NAMESPACE__ . '\\callTestFunction', ['param2', 'param3']); static::assertEquals(['function', ['param2', 'param3']], $result); // static method $result = $container->call(CallTestInvokers::class . '::staticMethod', ['param3', 'param4']); static::assertEquals(['staticMethod', ['param3', 'param4']], $result); // array of static $result = $container->call([CallTestInvokers::class, 'staticMethod'], ['param4', 'param5']); static::assertEquals(['staticMethod', ['param4', 'param5']], $result); // array of method $result = $container->call([new CallTestInvokers(), 'instanceMethod'], ['param5', 'param6']); static::assertEquals(['instanceMethod', ['param5', 'param6']], $result); // invoker $result = $container->call(new CallTestInvokers(), ['param6', 'param7']); static::assertEquals(['__invoke', ['param6', 'param7']], $result); // __call $result = $container->call([new CallTestInvokers(), 'callViaCallMagicMethod'], ['param7', 'param8']); static::assertEquals(['__call', 'callViaCallMagicMethod', ['param7', 'param8']], $result); // __staticCall $result = $container->call([CallTestInvokers::class, 'callViaStaticCallMagicMethod'], ['param8', 'param9']); static::assertEquals(['__callStatic', 'callViaStaticCallMagicMethod', ['param8', 'param9']], $result); }