getMethods() as $method) { $params = array(); // Access type $access = implode(' ', \Reflection::getModifierNames($method->getModifiers())); // Method parameters foreach($method->getParameters() as $param) { $paramString = ''; if ( $param->isArray() ) { $paramString .= 'array '; } else { try { if (( $paramClassName = $param->getClass() )) { $paramString .= $paramClassName->name . ' '; } } catch ( ReflectionException $e ) { preg_match( '/\[\s\<\w+?>\s([\w]+)/s', $param->__toString(), $matches ); $paramClassName = isset( $matches[1] ) ? $matches[1] : ''; $paramString .= ' UNDEFINED CLASS (' . $paramClassName . ') '; } } $paramString .= ($param->isPassedByReference() ? '&' : '') . '$' . $param->getName(); if($param->isDefaultValueAvailable()) { if(is_array($param->getDefaultValue())) { $arrayValues = array(); foreach($param->getDefaultValue() as $key => $value) { $arrayValues[] = $key . ' => ' . $value; } $defaultValue = 'array(' . implode(', ', $arrayValues) . ')'; } elseif($param->getDefaultValue() === null){ $defaultValue = 'NULL'; } elseif($param->getDefaultValue() === false){ $defaultValue = 'false'; } elseif($param->getDefaultValue() === true){ $defaultValue = 'true'; } elseif($param->getDefaultValue() === ''){ $defaultValue = '""'; } else { $defaultValue = $param->getDefaultValue(); } $paramString .= ' = ' . $defaultValue; } $params[] = $paramString; } $output = new \kintVariableData(); // Simple DocBlock parser, look for @return if(($docBlock = $method->getDocComment())) { $matches = array(); if(preg_match_all('/@(\w+)\s+(.*)\r?\n/m', $docBlock, $matches)) { $lines = array_combine($matches[1], $matches[2]); if(isset($lines['return'])) { $output->operator = '->'; # since we're outputting code, assumption that the string is utf8 is most likely correct # and saves resources $output->type = self::_escape( $lines['return'], 'UTF-8' ); } } } $output->name = ($method->returnsReference() ? '&' : '') . $method->getName() . '(' . implode(', ', $params) . ')'; $output->access = $access; if(is_string($docBlock)) { $lines = array(); foreach(explode("\n", $docBlock) as $line) { $line = trim($line); if(in_array($line, array('/**', '/*', '*/'))) { continue; }elseif(strpos($line, '*') === 0) { $line = substr($line, 1); } $lines[] = self::_escape( trim( $line ), 'UTF-8' ); } $output->extendedValue = implode("\n", $lines) . "\n\n"; } $declaringClass = $method->getDeclaringClass(); $declaringClassName = $declaringClass->getName(); if($declaringClassName !== $className) { $output->extendedValue .= "Inherited from {$declaringClassName}\n"; } $fileName = \Kint::shortenPath($method->getFileName(), $method->getStartLine()); if($fileName) { $output->extendedValue .= "Defined in {$fileName}"; } $sortName = $access . $method->getName(); if($method->isPrivate()) { $private[$sortName] = $output; } elseif($method->isProtected()) { $protected[$sortName] = $output; } else { $public[$sortName] = $output; } } if(!$private && !$protected && !$public) { self::$cache[$className] = false; } ksort($public); ksort($protected); ksort($private); self::$cache[$className] = $public + $protected + $private; } $this->value = self::$cache[$className]; $this->type = 'Available methods'; $this->size = count(self::$cache[$className]); } }