Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Public Member Functions | Protected Member Functions | Protected Attributes
Circular Class Reference

Public Member Functions

 buildCircularDependencies ($dependencies)
 

Protected Member Functions

 init ($dependencies)
 
 expandDependencies ($vertex, $path=[])
 
 buildCircular ($modules)
 
 divideByModules ($circularDependencies)
 

Protected Attributes

 $dependencies = []
 
 $circularDependencies = []
 
 $graph
 

Detailed Description

Build circular dependencies by modules map

Definition at line 13 of file Circular.php.

Member Function Documentation

◆ buildCircular()

buildCircular (   $modules)
protected

Build all circular dependencies based on chain

Parameters
array$modules
Returns
void

Definition at line 114 of file Circular.php.

115  {
116  $path = '/' . implode('/', $modules);
117  if (isset($this->circularDependencies[$path])) {
118  return;
119  }
120  $this->circularDependencies[$path] = $modules;
121  $modules[] = array_shift($modules);
122  $this->buildCircular($modules);
123  }

◆ buildCircularDependencies()

buildCircularDependencies (   $dependencies)

Build modules dependencies

Parameters
array$dependenciesKey is the vertex and the value are the adjacent vertices(dependencies) of this vertex
Returns
array

Definition at line 42 of file Circular.php.

43  {
44  $this->init($dependencies);
45 
46  foreach (array_keys($this->dependencies) as $vertex) {
47  $this->expandDependencies($vertex);
48  }
49 
50  $circulars = $this->graph->findCycle(null, false);
51  foreach ($circulars as $circular) {
52  array_shift($circular);
53  $this->buildCircular($circular);
54  }
55 
56  return $this->divideByModules($this->circularDependencies);
57  }
divideByModules($circularDependencies)
Definition: Circular.php:131

◆ divideByModules()

divideByModules (   $circularDependencies)
protected

Divide dependencies by modules

Parameters
array$circularDependencies
Returns
array

Definition at line 131 of file Circular.php.

132  {
133  $dependenciesByModule = [];
134  foreach ($circularDependencies as $circularDependency) {
135  $module = $circularDependency[0];
136  $circularDependency[] = $module;
137  $dependenciesByModule[$module][] = $circularDependency;
138  }
139 
140  return $dependenciesByModule;
141  }

◆ expandDependencies()

expandDependencies (   $vertex,
  $path = [] 
)
protected

Expand modules dependencies from chain

Parameters
string$vertex
array$pathnesting path
Returns
void

Definition at line 79 of file Circular.php.

80  {
81  if (!$this->dependencies[$vertex]) {
82  return;
83  }
84 
85  $path[] = $vertex;
86  foreach ($this->dependencies[$vertex] as $dependency) {
87  if (!isset($this->dependencies[$dependency])) {
88  // dependency vertex is not described in basic definition
89  continue;
90  }
91  $relations = $this->graph->getRelations();
92  if (isset($relations[$vertex][$dependency])) {
93  continue;
94  }
95  $this->graph->addRelation($vertex, $dependency);
96 
97  $searchResult = array_search($dependency, $path);
98 
99  if (false !== $searchResult) {
100  $this->buildCircular(array_slice($path, $searchResult));
101  break;
102  } else {
103  $this->expandDependencies($dependency, $path);
104  }
105  }
106  }

◆ init()

init (   $dependencies)
protected

Init data before building

Parameters
array$dependencies
Returns
void

Definition at line 65 of file Circular.php.

66  {
67  $this->dependencies = $dependencies;
68  $this->circularDependencies = [];
69  $this->graph = new Graph(array_keys($this->dependencies), []);
70  }

Field Documentation

◆ $circularDependencies

$circularDependencies = []
protected

Definition at line 27 of file Circular.php.

◆ $dependencies

$dependencies = []
protected

Definition at line 20 of file Circular.php.

◆ $graph

$graph
protected

Definition at line 34 of file Circular.php.


The documentation for this class was generated from the following file: