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. |
/** * 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; }
public function testClassDependencies() { $expected = array('Exception', 'ReflectionClass', 'ReflectionProperty', 'ReflectionException', 'SplFileObject', 'lithium\\core\\Libraries'); $result = Inspector::dependencies($this->subject(), array('type' => 'static')); $this->assertEqual($expected, $result); $expected[] = 'lithium\\util\\Collection'; $result = Inspector::dependencies($this->subject()); $this->assertEqual($expected, $result); }