Answer the question
In order to leave comments, you need to log in
Dependency management class, how do you like the implementation?
Outlined the dependency management class in the application
/**
* Class DependencyManager
*/
class DependencyManager {
/**
* @var array of dependencies
*/
public $dependencies;
/**
* DependencyManager constructor
*/
public function __construct() {
$this->dependencies = [
[
'class' => 'SomeClass',
'dependencies' => [
'DependentedClass', 'SecondDependentedClass'
]
]
];
}
/**
* @param $class
* @return null OR Dependencies of class
*/
public function checkDependencies($class) {
$dependenciesByClass = null;
foreach( $this->dependencies as $data ) {
if($data['class'] === $class) {
$dependenciesByClass = $data['dependencies'];
break;
}
}
return $dependenciesByClass;
}
}
/**
* Class DependentedClass
*/
class DependentedClass {
public $variable = 'this text placed in DependentedClass <br />';
}
/**
* Class SecondDependentedClass
*/
class SecondDependentedClass {
public $moreVariable = 'this text placed in SecondDependentedClass';
}
/**
* Class SomeClass
* class for example
* It is dependent on other classes
*/
class SomeClass {
public $varInDependentedClass;
public $varInSecondDependentedClass;
public function __construct(DependentedClass $dependentedClass, SecondDependentedClass $secondDependentedClass) {
$this->varInDependentedClass = $dependentedClass->variable;
$this->varInSecondDependentedClass = $secondDependentedClass->moreVariable;
}
}
/**
* Class Loader
* This class creates an instance of any class
*/
class Loader {
public $className;
public $dependencyManager;
/**
* Loader constructor.
* @param DependencyManager $dependencyManager
*/
public function __construct(DependencyManager $dependencyManager) {
$this->dependencyManager = $dependencyManager;
}
/**
* @return null|object
* this method loads classes
*/
public function loadClass() {
$dependencies = null;
$arrayObjects = null;
$reflection = null;
$instance = null;
$this->className = 'SomeClass';
if( !is_null($this->className) ) {
$dependencies = $this->dependencyManager->checkDependencies($this->className);
if( !is_null($dependencies) ) {
for($i = 0; $i < count($dependencies); $i++) {
$arrayObjects[$i] = new $dependencies[$i];
}
$reflection = new ReflectionClass( $this->className );
$instance = $reflection->newInstanceArgs($arrayObjects);
} else {
$instance = new $this->className;
}
}
return $instance;
}
}
$loader = new Loader( new DependencyManager() );
var_dump( $loader->loadClass() );
/*
* var_dump() results:
* object(SomeClass)#6
* (2) {
* ["varInDependentedClass"] => string(43) "this text placed in DependentedClass"
* ["varInSecondDependentedClass"] => string(42) "this text placed in SecondDependentedClass"
* }
*/
Answer the question
In order to leave comments, you need to log in
Have you decided to write your own Dependency Injection Container with blackjack and ***?
Yes, to prescribe dependencies by hand (in the config) is the norm.
If you do not want to do this, then google for the keywords "di container autowiring"
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question