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 ] );
}
}