Skip to content

Commit

Permalink
Merge bdf8af9 into af288c6
Browse files Browse the repository at this point in the history
  • Loading branch information
mnapoli committed Jun 4, 2017
2 parents af288c6 + bdf8af9 commit 782bf83
Show file tree
Hide file tree
Showing 82 changed files with 2,925 additions and 1,921 deletions.
5 changes: 2 additions & 3 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,12 @@
"require": {
"php": ">=7.0.0",
"psr/container": "^1.0",
"psr/simple-cache": "^1.0",
"php-di/invoker": "^2.0",
"php-di/phpdoc-reader": "^2.0.1"
},
"require-dev": {
"phpunit/phpunit": "~5.0",
"mnapoli/phpunit-easymock": "~0.2.0",
"phpunit/phpunit": "~5.7",
"mnapoli/phpunit-easymock": "~0.2.3",
"doctrine/annotations": "~1.2",
"ocramius/proxy-manager": "~2.0.2"
},
Expand Down
4 changes: 3 additions & 1 deletion phpunit.xml.dist
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
syntaxCheck="true"
forceCoversAnnotation="true"
bootstrap="./vendor/autoload.php">

<testsuites>
Expand All @@ -24,6 +23,9 @@
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">src</directory>
<exclude>
<file>src/DI/Compiler/Template.php</file>
</exclude>
</whitelist>
</filter>

Expand Down
91 changes: 0 additions & 91 deletions src/DI/Cache/ArrayCache.php

This file was deleted.

66 changes: 66 additions & 0 deletions src/DI/CompiledContainer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<?php

namespace DI;

/**
* Compiled version of the dependency injection container.
*
* @author Matthieu Napoli <matthieu@mnapoli.fr>
*/
abstract class CompiledContainer extends Container
{
/**
* {@inheritdoc}
*/
public function get($name)
{
// Try to find the entry in the singleton map
if (isset($this->resolvedEntries[$name]) || array_key_exists($name, $this->resolvedEntries)) {
return $this->resolvedEntries[$name];
}

$method = static::METHOD_MAPPING[$name] ?? null;

// If it's a compiled entry, then there is a method in this class
if ($method !== null) {
// Check if we are already getting this entry -> circular dependency
if (isset($this->entriesBeingResolved[$name])) {
throw new DependencyException("Circular dependency detected while trying to resolve entry '$name'");
}
$this->entriesBeingResolved[$name] = true;

try {
$value = $this->$method();
} finally {
unset($this->entriesBeingResolved[$name]);
}

// Store the entry to always return it without recomputing it
$this->resolvedEntries[$name] = $value;

return $value;
}

return parent::get($name);
}

/**
* {@inheritdoc}
*/
public function has($name)
{
if (! is_string($name)) {
throw new \InvalidArgumentException(sprintf(
'The name parameter must be of type string, %s given',
is_object($name) ? get_class($name) : gettype($name)
));
}

// The parent method is overridden to check in our array, it avoids resolving definitions
if (isset(static::METHOD_MAPPING[$name])) {
return true;
}

return parent::has($name);
}
}

0 comments on commit 782bf83

Please sign in to comment.