Skip to content

Commit

Permalink
Improvements
Browse files Browse the repository at this point in the history
Faster resolving
Added getDefinition for Rule
  • Loading branch information
VeeeneX committed Jul 6, 2015
1 parent 7c27e98 commit 639212d
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 31 deletions.
4 changes: 4 additions & 0 deletions src/DI/Rule.php
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,10 @@ public function setInstance($Instance)
return $this->Instance = $Instance;
}

public function getDefinition($method = "__construct")
{
return (isset($this->method[$method])) ? $this->method[$method] : ["parameters" => [], "dependecies" => []];
}
/*
Method
*/
Expand Down
38 changes: 7 additions & 31 deletions src/Injector.php
Original file line number Diff line number Diff line change
Expand Up @@ -90,10 +90,6 @@ public function prepareParameters($parameters, $arguments = [], $ruleParameters
{
$values = [];

/* Prepare all parameters that aren't set to null */
for ($i = 0; $i < count($parameters); $i++) {
$values[] = null;
}
foreach ($arguments as $argIndex => $argument) {
if (is_string($argIndex)) {
foreach ($parameters as $paramIndex => $parameter) {
Expand All @@ -112,15 +108,12 @@ public function prepareParameters($parameters, $arguments = [], $ruleParameters
/* Is parameter hinted with class? */
if ($class = $parameter->getClass()) {

/* Try to find it in arguments */
foreach ($arguments as $argIndex => $argument) {
if (is_object($argument)) {
if ($class->isInstance($argument)) {
$values[$paramIndex] = $argument;
unset($arguments[$argIndex]);
break;
}
}
$className = $class->getName();

if (isset($ruleParameters["dependencies"][$className])) {
$values[$paramIndex] = $ruleParameters["dependencies"][$className];
} else {
$values[$paramIndex] = $this->make($className);
}

/* Nope normal parameter */
Expand All @@ -132,23 +125,6 @@ public function prepareParameters($parameters, $arguments = [], $ruleParameters
}
}

foreach ($parameters as $paramIndex => $parameter) {

if (!isset($values[$paramIndex])) {

if ($class = $parameter->getClass()) {

if (isset($ruleParameters["dependencies"][$class->getName()])) {
$values[$paramIndex] = $ruleParameters["dependencies"][$class->getName()];
} else {
$values[$paramIndex] = $this->make($class->getName());
}

} else {
$values[$paramIndex] = array_shift($arguments);
}
}
}

return $values;
}
Expand Down Expand Up @@ -257,7 +233,7 @@ public function callMethod($alias, $method = '', $arguments = [])

$ReflectionMethod = $Rule->ReflectionClass->getMethod($method);
$parameters = $ReflectionMethod->getParameters();
$values = $this->prepareParameters($parameters, $arguments, $Rule->getDefinition($method));
$values = $this->prepareParameters($parameters, $arguments, $Rule->getDefinition($method), $method);

if ($Rule->hasInstance) {
return $ReflectionMethod->invokeArgs($Rule->Instance, $values);
Expand Down

0 comments on commit 639212d

Please sign in to comment.