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