protected final function generateExecutionRecord($class_name, $method_name) { $class = new ReflectionClass($class_name); if (FALSE === $class->hasMethod($method_name)) { throw new UserException("Method({$method_name}) does not exist in class({$class_name})."); } $method = new ReflectionMethod($class_name, $method_name); if (TRUE === $method->isPublic()) { throw new UserException("Method({$method_name}) in class({$class_name}) is public."); } $declaring_class = $method->getDeclaringClass(); $declaring_class_name = $declaring_class->getName(); $methods_visibility = $declaring_class->getStaticProperties()['methodsVisibility']; $method_visibility = $this->getMethodVisibility($methods_visibility, $method_name); list($initiator_class_name, $initiator_type) = $this->getInitiatorNameAndType($method_name, $declaring_class); $method_accessibility = $this->getMethodAccessibility($method_visibility, $initiator_type); $handler_prefix = Loader::getHandlerPrefixFromPath($declaring_class_name); $handler_suffix = Loader::getHandlerSuffixFromPath($declaring_class_name); $execution_record = ['success' => FALSE, 'class' => $class_name, 'method' => $method_name, 'method_accessibility' => $method_accessibility, 'declaring_class' => $declaring_class_name, 'method_visibility' => $method_visibility, 'initiator_class' => $initiator_class_name, 'initiator_type' => $initiator_type, 'handler_prefix' => $handler_prefix, 'handler_suffix' => $handler_suffix]; return $execution_record; }