lithium\analysis\Inspector::methods PHP Method

methods() public static method

Returns various information on the methods of an object, in different formats.
public static methods ( mixed $class, string $format = null, array $options = [] ) : mixed
$class mixed A string class name or an object instance, from which to get methods.
$format string The type and format of data to return. Available options are: - `null`: Returns a `Collection` object containing a `ReflectionMethod` 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.
$options array 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.
return mixed Return value depends on the $format given: - `null` on failure. - `lithium\util\Collection` if $format is `null` - `array` if $format is either `'extends'` or `'ranges'`.
    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;
    }

Usage Example

Example #1
0
 /**
  * "Explain" methods step.
  *
  * @return void
  */
 public function explainExplainMethods()
 {
     $this->header("The Explain Methods");
     $this->out("The next step is to create your first `explain` method. When an exercise is run, each user-defined method that begins with 'explain' is run in the order it was defined.\n");
     $this->out("Let's start by defining a new method called `explainIntro`.");
     $this->halt();
     $methods = \lithium\analysis\Inspector::methods('\\li3_exercises\\extensions\\exercises\\Blog', 'extents');
     $this->assertTrue(isset($methods['explainIntro']), "Hmmm. I can't seem to find a method defined on your new Blog class named '{:purple}explainIntro{:end}'. {:error}Make sure it has public visibility!{:end}");
 }
All Usage Examples Of lithium\analysis\Inspector::methods