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(); $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; } if ( count( self::$cache[ $className ] ) === 0 ) { return false; } $this->value = self::$cache[ $className ]; $this->type = 'Available methods'; $this->size = count( self::$cache[ $className ] ); } }