public function invokeBootMethods($object, ContainerInterface $container) { foreach (get_class_methods($object) as $method) { if ('boot' === strtolower(substr($method, 0, 4))) { if ($object instanceof static && 'bootkernel' === strtolower($method)) { continue; } if (4 == strlen($method)) { $object->boot(); } else { $args = $container->populateArguments(new \ReflectionMethod(get_class($object), $method)); switch (count($args)) { case 0: $object->{$method}(); break; case 1: $object->{$method}($args[0]); break; case 2: $object->{$method}($args[0], $args[1]); break; case 3: $object->{$method}($args[0], $args[1], $args[2]); break; case 4: $object->{$method}($args[0], $args[1], $args[2], $args[3]); break; default: call_user_func_array([$object, $method], $args); } } } } }