private final function getInitiatorNameAndType($method_name, $declaring_class) { $backtrace = Kit::columns(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 20), ['class', 'function'], FALSE); $initiator_name = NULL; foreach ($backtrace as $record) { if (TRUE === is_null($record['class']) or TRUE === Kit::in($record['class'], ['Ilex\\Base\\Base', 'Ilex\\Base\\Controller\\Service\\BaseService', 'Ilex\\Base\\Model\\BaseModel'])) { continue; } if ($method_name !== $record['function']) { $initiator_name = $record['class']; break; } } if (TRUE === is_null($initiator_name)) { $result = [$initiator_name, self::T_OTHER]; } else { $initiator = new ReflectionClass($initiator_name); $declaring_class_name = $declaring_class->getName(); if ($initiator_name === $declaring_class_name) { $result = [$initiator_name, self::T_SELF]; } elseif (TRUE === $initiator->isSubclassOf($declaring_class_name)) { $result = [$initiator_name, self::T_DESCENDANT]; } else { $result = [$initiator_name, self::T_OTHER]; } } // var_dump([$method_name, $declaring_class, $initiator_name]); // var_dump($result); // var_dump($backtrace); return $result; }