lithium\analysis\Inspector::dependencies PHP Метод

dependencies() публичный статический Метод

Gets the static and dynamic dependencies for a class or group of classes.
public static dependencies ( mixed $classes, array $options = [] ) : array
$classes mixed Either a string specifying a class, or a numerically indexed array of classes
$options array Option consists of: - `'type'`: The type of dependency to check: `static` for static dependencies, `dynamic`for dynamic dependencies or `null` for both merged in the same array. Defaults to `null`.
Результат array An array of the static and dynamic class dependencies or each if `type` is defined in $options.
    public static function dependencies($classes, array $options = array())
    {
        $defaults = array('type' => null);
        $options += $defaults;
        $static = $dynamic = array();
        $trim = function ($c) {
            return trim(trim($c, '\\'));
        };
        $join = function ($i) {
            return join('', $i);
        };
        foreach ((array) $classes as $class) {
            $data = explode("\n", file_get_contents(Libraries::path($class)));
            $data = "<?php \n" . join("\n", preg_grep('/^\\s*use /', $data)) . "\n ?>";
            $classes = array_map($join, Parser::find($data, 'use *;', array('return' => 'content', 'lineBreaks' => true, 'startOfLine' => true, 'capture' => array('T_STRING', 'T_NS_SEPARATOR'))));
            if ($classes) {
                $static = array_unique(array_merge($static, array_map($trim, $classes)));
            }
            $classes = static::info($class . '::$_classes', array('value'));
            if (isset($classes['value'])) {
                $dynamic = array_merge($dynamic, array_map($trim, array_values($classes['value'])));
            }
        }
        if (empty($options['type'])) {
            return array_unique(array_merge($static, $dynamic));
        }
        $type = $options['type'];
        return isset(${$type}) ? ${$type} : null;
    }

Usage Example

Пример #1
0
 /**
  * Returns all classes directly depending on a given class.
  *
  * @param string $dependency The class name to use as a dependency.
  * @param string $exclude Regex path exclusion filter.
  * @return array Classes having a direct dependency on `$dependency`. May contain duplicates.
  */
 protected static function _affected($dependency, $exclude = null)
 {
     $exclude = $exclude ?: '/(tests|webroot|resources|libraries|plugins)/';
     $classes = Libraries::find(true, compact('exclude') + array('recursive' => true));
     $dependency = ltrim($dependency, '\\');
     $affected = array();
     foreach ($classes as $class) {
         if (isset(static::$_cachedDepends[$class])) {
             $depends = static::$_cachedDepends[$class];
         } else {
             $depends = Inspector::dependencies($class);
             $depends = array_map(function ($c) {
                 return ltrim($c, '\\');
             }, $depends);
             static::$_cachedDepends[$class] = $depends;
         }
         if (in_array($dependency, $depends)) {
             $affected[] = $class;
         }
     }
     return $affected;
 }
All Usage Examples Of lithium\analysis\Inspector::dependencies