lithium\analysis\Inspector::methods()
Returns various information on the methods of an object, in different formats.
Parameters
-
mixed
$class
A string class name or an object instance, from which to get methods.
-
string
$format
The type and format of data to return. Available options are:
null
: Returns aCollection
object containing aReflectionMethod
instance for each method.'extents'
: Returns a two-dimensional array with method names as keys, and an array with starting and ending line numbers as values.'ranges'
: Returns a two-dimensional array where each key is a method name, and each value is an array of line numbers which are contained in the method.
-
array
$options
Set of options applied directly (check
_items()
for more options):'methods'
array: An arbitrary list of methods to search, as a string (single method name) or array of method names.'group'
: If true (default) the array is grouped by context (ex.: method name), if false the results are sequentially appended to an array. -'self': If true (default), only returns properties defined in$class
, excluding properties from inherited classes.
Returns
mixedReturn value depends on the $format given:
null
on failure.lithium\util\Collection
if $format isnull
array
if $format is either'extends'
or'ranges'
.
Source
public static function methods($class, $format = null, array $options = array()) {
$defaults = array('methods' => array(), 'group' => true, 'self' => true);
$options += $defaults;
if (!(is_object($class) && $class instanceof ReflectionClass)) {
try {
$class = new ReflectionClass($class);
} catch (ReflectionException $e) {
return null;
}
}
$options += array('names' => $options['methods']);
$methods = static::_items($class, 'getMethods', $options);
$result = array();
switch ($format) {
case null:
return $methods;
case 'extents':
if ($methods->getName() === array()) {
return array();
}
$extents = function($start, $end) { return array($start, $end); };
$result = array_combine($methods->getName(), array_map(
$extents, $methods->getStartLine(), $methods->getEndLine()
));
break;
case 'ranges':
$ranges = function($lines) {
list($start, $end) = $lines;
return ($end <= $start + 1) ? array() : range($start + 1, $end - 1);
};
$result = array_map($ranges, static::methods(
$class, 'extents', array('group' => true) + $options
));
break;
}
if ($options['group']) {
return $result;
}
$tmp = $result;
$result = array();
array_map(function($ln) use (&$result) { $result = array_merge($result, $ln); }, $tmp);
return $result;
}