Skip to content

Commit

Permalink
Merge pull request #2 from emonkak/develop
Browse files Browse the repository at this point in the history
Fix an optional argument handing
  • Loading branch information
emonkak committed Dec 15, 2015
2 parents 3b6f422 + 20fd7cd commit 17c8518
Show file tree
Hide file tree
Showing 28 changed files with 544 additions and 96 deletions.
9 changes: 3 additions & 6 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,18 @@ php:
- 5.4
- 5.5
- 5.6
- 7.0
- hhvm

matrix:
allow_failures:
- php: hhvm

cache:
directories:
- vendor
- $HOME/.composer/cache

before_script:
- sudo apt-get -qq update && sudo apt-get -qq install graphviz
- sh -c "if [ $TRAVIS_PHP_VERSION != 'hhvm' ]; then pecl config-set preferred_state beta; printf "yes\n" | pecl install apcu; else echo 'extension="apc.so"' >> ./php.ini; fi"
- composer install
- sh -c "if [ $TRAVIS_PHP_VERSION != 'hhvm' ]; then if [ ${TRAVIS_PHP_VERSION%%.*} -ge 7 ]; then echo "yes\n" | pecl install apcu; else echo "yes\n" | pecl install apcu-4.0.10; fi; echo 'extension=apcu.so' >> ./php.ini; else echo 'extension=apc.so' >> ./php.ini; fi"
- composer install --prefer-source
- sh -c "if [ $TRAVIS_PHP_VERSION != 'hhvm' ]; then phpenv config-add ./php.ini; fi"

script:
Expand Down
4 changes: 2 additions & 2 deletions benchmarks/AuraDiEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public function get()
{
$container = new Container(new Forge(new Config()));

$container->set('Emonkak\Di\Benchmarks\Fixtures\Foo', $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Foo'));
$container->set('Emonkak\Di\Benchmarks\Fixtures\FooInterface', $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Foo'));
$container->params['Emonkak\Di\Benchmarks\Fixtures\Foo'] = [
'bar' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Bar'),
'baz' => $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Baz'),
Expand Down Expand Up @@ -57,7 +57,7 @@ public function get()
$container->set('Emonkak\Di\Benchmarks\Fixtures\Fred', $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Fred'));
$container->set('Emonkak\Di\Benchmarks\Fixtures\Plugh', $container->lazyNew('Emonkak\Di\Benchmarks\Fixtures\Plugh'));

$foo = $container->get('Emonkak\Di\Benchmarks\Fixtures\Foo');
$foo = $container->get('Emonkak\Di\Benchmarks\Fixtures\FooInterface');
assert($foo instanceof Foo);
}
}
8 changes: 6 additions & 2 deletions benchmarks/EmonkakDiEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Athletic\AthleticEvent;
use Emonkak\Di\Benchmarks\Fixtures\Foo;
use Emonkak\Di\Cache\ApcCache;
use Emonkak\Di\Cache\ApcuCache;
use Emonkak\Di\Cache\FilesystemCache;
use Emonkak\Di\Container;
use Emonkak\Di\Extras\ServiceProviderGenerator;
Expand All @@ -21,9 +22,10 @@ class EmonkakDiEvent extends AthleticEvent
public function get()
{
$container = Container::create();
$container->bind('Emonkak\Di\Benchmarks\Fixtures\FooInterface')->to('Emonkak\Di\Benchmarks\Fixtures\Foo');
$container->bind('Emonkak\Di\Benchmarks\Fixtures\BarInterface')->to('Emonkak\Di\Benchmarks\Fixtures\Bar');
$container->bind('Emonkak\Di\Benchmarks\Fixtures\BazInterface')->to('Emonkak\Di\Benchmarks\Fixtures\Baz');
$foo = $container->get('Emonkak\Di\Benchmarks\Fixtures\Foo');
$foo = $container->get('Emonkak\Di\Benchmarks\Fixtures\FooInterface');
assert($foo instanceof Foo);
}

Expand All @@ -34,9 +36,10 @@ public function getWithApcCache()
{
$container = new Container(
new DefaultInjectionPolicy(),
new ApcCache('container'),
extension_loaded('apcu') ? new ApcuCache('container') : new ApcCache('container'),
new \ArrayObject()
);
$container->bind('Emonkak\Di\Benchmarks\Fixtures\FooInterface')->to('Emonkak\Di\Benchmarks\Fixtures\Foo');
$container->bind('Emonkak\Di\Benchmarks\Fixtures\BarInterface')->to('Emonkak\Di\Benchmarks\Fixtures\Bar');
$container->bind('Emonkak\Di\Benchmarks\Fixtures\BazInterface')->to('Emonkak\Di\Benchmarks\Fixtures\Baz');
$foo = $container->get('Emonkak\Di\Benchmarks\Fixtures\Foo');
Expand All @@ -49,6 +52,7 @@ public function getWithApcCache()
public function getWithPimple()
{
$container = PimpleContainer::create();
$container->bind('Emonkak\Di\Benchmarks\Fixtures\FooInterface')->to('Emonkak\Di\Benchmarks\Fixtures\Foo');
$container->bind('Emonkak\Di\Benchmarks\Fixtures\BarInterface')->to('Emonkak\Di\Benchmarks\Fixtures\Bar');
$container->bind('Emonkak\Di\Benchmarks\Fixtures\BazInterface')->to('Emonkak\Di\Benchmarks\Fixtures\Baz');
$foo = $container->get('Emonkak\Di\Benchmarks\Fixtures\Foo');
Expand Down
2 changes: 1 addition & 1 deletion benchmarks/Fixtures/Foo.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Emonkak\Di\Benchmarks\Fixtures;

class Foo
class Foo implements FooInterface
{
private $bar;
private $baz;
Expand Down
7 changes: 7 additions & 0 deletions benchmarks/Fixtures/FooInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php

namespace Emonkak\Di\Benchmarks\Fixtures;

interface FooInterface
{
}
6 changes: 0 additions & 6 deletions benchmarks/NativeEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,6 @@
namespace Emonkak\Di\Benchmarks;

use Athletic\AthleticEvent;
use Doctrine\Common\Cache\ApcCache;
use Doctrine\Common\Cache\ArrayCache;
use Doctrine\Common\Cache\ChainCache;
use Emonkak\Di\Container;
use Emonkak\Di\InjectionPolicy\DefaultInjectionPolicy;
use Emonkak\Di\Injector;
use Emonkak\Di\Benchmarks\Fixtures\Foo;
use Emonkak\Di\Benchmarks\Fixtures\Bar;
use Emonkak\Di\Benchmarks\Fixtures\Baz;
Expand Down
37 changes: 27 additions & 10 deletions benchmarks/PhpDiEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use DI;
use DI\ContainerBuilder;
use Doctrine\Common\Cache\ApcCache;
use Doctrine\Common\Cache\ApcuCache;
use Emonkak\Di\Benchmarks\Fixtures\Foo;

class PhpDiEvent extends AthleticEvent
Expand All @@ -18,13 +19,21 @@ public function get()
$builder = new ContainerBuilder();
$container = $builder->build();
$container->set(
'Emonkak\Di\Benchmarks\Fixtures\Foo',
DI\object()->constructor(
DI\link('Emonkak\Di\Benchmarks\Fixtures\Bar'),
DI\link('Emonkak\Di\Benchmarks\Fixtures\Baz')
'Emonkak\Di\Benchmarks\Fixtures\FooInterface',
DI\object('Emonkak\Di\Benchmarks\Fixtures\Foo')->constructor(
DI\link('Emonkak\Di\Benchmarks\Fixtures\BarInterface'),
DI\link('Emonkak\Di\Benchmarks\Fixtures\BazInterface')
)
);
$foo = $container->get('Emonkak\Di\Benchmarks\Fixtures\Foo');
$container->set(
'Emonkak\Di\Benchmarks\Fixtures\BarInterface',
DI\object('Emonkak\Di\Benchmarks\Fixtures\Bar')
);
$container->set(
'Emonkak\Di\Benchmarks\Fixtures\BazInterface',
DI\object('Emonkak\Di\Benchmarks\Fixtures\Baz')
);
$foo = $container->get('Emonkak\Di\Benchmarks\Fixtures\FooInterface');
assert($foo instanceof Foo);
}

Expand All @@ -34,15 +43,23 @@ public function get()
public function getWithCache()
{
$builder = new ContainerBuilder();
$builder->setDefinitionCache(new ApcCache());
$builder->setDefinitionCache(extension_loaded('apcu') ? new ApcuCache() : new ApcCache());
$container = $builder->build();
$container->set(
'Emonkak\Di\Benchmarks\Fixtures\Foo',
DI\object()->constructor(
DI\link('Emonkak\Di\Benchmarks\Fixtures\Bar'),
DI\link('Emonkak\Di\Benchmarks\Fixtures\Baz')
'Emonkak\Di\Benchmarks\Fixtures\FooInterface',
DI\object('Emonkak\Di\Benchmarks\Fixtures\Foo')->constructor(
DI\link('Emonkak\Di\Benchmarks\Fixtures\BarInterface'),
DI\link('Emonkak\Di\Benchmarks\Fixtures\BazInterface')
)
);
$container->set(
'Emonkak\Di\Benchmarks\Fixtures\BarInterface',
DI\object('Emonkak\Di\Benchmarks\Fixtures\Bar')
);
$container->set(
'Emonkak\Di\Benchmarks\Fixtures\BazInterface',
DI\object('Emonkak\Di\Benchmarks\Fixtures\Baz')
);
$foo = $container->get('Emonkak\Di\Benchmarks\Fixtures\Foo');
assert($foo instanceof Foo);
}
Expand Down
8 changes: 4 additions & 4 deletions benchmarks/PimpleEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class PimpleEvent extends AthleticEvent
public function get()
{
$container = new Container();
$container['Emonkak\Di\Benchmarks\Fixtures\Foo'] = function($c) {
$container['Emonkak\Di\Benchmarks\Fixtures\FooInterface'] = function($c) {
return new Foo($c['Emonkak\Di\Benchmarks\Fixtures\Bar'], $c['Emonkak\Di\Benchmarks\Fixtures\Baz']);
};
$container['Emonkak\Di\Benchmarks\Fixtures\Bar'] = function($c) {
Expand Down Expand Up @@ -59,7 +59,7 @@ public function get()
return new Plugh();
};

$foo = $container['Emonkak\Di\Benchmarks\Fixtures\Foo'];
$foo = $container['Emonkak\Di\Benchmarks\Fixtures\FooInterface'];
assert($foo instanceof Foo);
}

Expand All @@ -69,7 +69,7 @@ public function get()
public function getFactory()
{
$container = new Container();
$container['Emonkak\Di\Benchmarks\Fixtures\Foo'] = $container->factory(function($c) {
$container['Emonkak\Di\Benchmarks\Fixtures\FooInterface'] = $container->factory(function($c) {
return new Foo($c['Emonkak\Di\Benchmarks\Fixtures\BarInterface'], $c['Emonkak\Di\Benchmarks\Fixtures\BazInterface']);
});
$container['Emonkak\Di\Benchmarks\Fixtures\BarInterface'] = $container->factory(function($c) {
Expand Down Expand Up @@ -103,7 +103,7 @@ public function getFactory()
return new Plugh();
});

$foo = $container['Emonkak\Di\Benchmarks\Fixtures\Foo'];
$foo = $container['Emonkak\Di\Benchmarks\Fixtures\FooInterface'];
assert($foo instanceof Foo);
}
}
10 changes: 6 additions & 4 deletions benchmarks/RayDiEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Athletic\AthleticEvent;
use Doctrine\Common\Cache\ApcCache;
use Doctrine\Common\Cache\ApcuCache;
use Emonkak\Di\Benchmarks\Fixtures\Foo;
use Ray\Di\AbstractModule;
use Ray\Di\CacheInjector;
Expand All @@ -17,7 +18,7 @@ class RayDiEvent extends AthleticEvent
public function get()
{
$injector = Injector::create([new MyModule()]);
$foo = $injector->getInstance('Emonkak\Di\Benchmarks\Fixtures\Foo');
$foo = $injector->getInstance('Emonkak\Di\Benchmarks\Fixtures\FooInterface');
assert($foo instanceof Foo);
}

Expand All @@ -32,17 +33,18 @@ function() {
},
function() {},
'ray-di',
new ApcCache()
extension_loaded('apcu') ? new ApcuCache() : new ApcCache()
);
$foo = $injector->getInstance('Emonkak\Di\Benchmarks\Fixtures\Foo');
$foo = $injector->getInstance('Emonkak\Di\Benchmarks\Fixtures\FooInterface');
assert($foo instanceof Foo);
}
}

class MyModule extends AbstractModule
{
public function configure()
protected function configure()
{
$this->bind('Emonkak\Di\Benchmarks\Fixtures\FooInterface')->to('Emonkak\Di\Benchmarks\Fixtures\Foo');
$this->bind('Emonkak\Di\Benchmarks\Fixtures\BarInterface')->to('Emonkak\Di\Benchmarks\Fixtures\Bar');
$this->bind('Emonkak\Di\Benchmarks\Fixtures\BazInterface')->to('Emonkak\Di\Benchmarks\Fixtures\Baz');
}
Expand Down
12 changes: 6 additions & 6 deletions benchmarks/SymfonyDiEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ public function get()
{
$container = new ContainerBuilder();

$container->register('Emonkak\Di\Benchmarks\Fixtures\Foo', 'Emonkak\Di\Benchmarks\Fixtures\Foo')
->addArgument(new Reference('Emonkak\Di\Benchmarks\Fixtures\Bar'))
->addArgument(new Reference('Emonkak\Di\Benchmarks\Fixtures\Baz'));
$container->register('Emonkak\Di\Benchmarks\Fixtures\FooInterface', 'Emonkak\Di\Benchmarks\Fixtures\Foo')
->addArgument(new Reference('Emonkak\Di\Benchmarks\Fixtures\BarInterface'))
->addArgument(new Reference('Emonkak\Di\Benchmarks\Fixtures\BazInterface'));

$container->register('Emonkak\Di\Benchmarks\Fixtures\Bar', 'Emonkak\Di\Benchmarks\Fixtures\Bar')
$container->register('Emonkak\Di\Benchmarks\Fixtures\BarInterface', 'Emonkak\Di\Benchmarks\Fixtures\Bar')
->addArgument(new Reference('Emonkak\Di\Benchmarks\Fixtures\Qux'))
->addArgument(new Reference('Emonkak\Di\Benchmarks\Fixtures\Quux'));

$container->register('Emonkak\Di\Benchmarks\Fixtures\Baz', 'Emonkak\Di\Benchmarks\Fixtures\Baz')
$container->register('Emonkak\Di\Benchmarks\Fixtures\BazInterface', 'Emonkak\Di\Benchmarks\Fixtures\Baz')
->addArgument(new Reference('Emonkak\Di\Benchmarks\Fixtures\Corge'))
->addArgument(new Reference('Emonkak\Di\Benchmarks\Fixtures\Grault'));

Expand All @@ -42,7 +42,7 @@ public function get()
$container->register('Emonkak\Di\Benchmarks\Fixtures\Fred', 'Emonkak\Di\Benchmarks\Fixtures\Fred');
$container->register('Emonkak\Di\Benchmarks\Fixtures\Plugh', 'Emonkak\Di\Benchmarks\Fixtures\Plugh');

$foo = $container->get('Emonkak\Di\Benchmarks\Fixtures\Foo');
$foo = $container->get('Emonkak\Di\Benchmarks\Fixtures\FooInterface');
assert($foo instanceof Foo);
}
}
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@
"doctrine/cache": "~1.4@dev",
"facebook/xhprof": "dev-master",
"mnapoli/php-di": "~4.4",
"nikic/php-parser": "~1.0",
"nikic/php-parser": "~1.2",
"orno/cache": "~1.0",
"orno/di": "~2.3",
"phpunit/phpunit": "~4.4",
"pimple/pimple": "~3.0",
"ray/di": "~1.4",
"ray/di": "~1.0",
"satooshi/php-coveralls": "dev-master",
"symfony/dependency-injection": "~2.6",
"symfony/filesystem": "~2.6",
Expand Down
2 changes: 2 additions & 0 deletions php.ini
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
apc.enabled=1
apc.enable_cli=1
apcu.enabled=1
apcu.enable_cli=1
61 changes: 61 additions & 0 deletions src/Cache/ApcuCache.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<?php

namespace Emonkak\Di\Cache;

/**
* Provides the cache from APCu.
*/
class ApcuCache implements \ArrayAccess
{
/**
* @var string
*/
private $prefix;

/**
* @var integer
*/
private $lifetime;

/**
* @param string $prefix The string to be prepended to a key.
* @param integer $lifetime The time until a cache expiration.
*/
public function __construct($prefix = '', $lifetime = 0)
{
$this->prefix = $prefix;
$this->lifetime = $lifetime;
}

/**
* {@inheritdoc}
*/
public function offsetGet($offset)
{
return apcu_fetch($this->prefix . $offset);
}

/**
* {@inheritdoc}
*/
public function offsetExists($offset)
{
return apcu_exists($this->prefix . $offset);
}

/**
* {@inheritdoc}
*/
public function offsetSet($offset, $value)
{
apcu_store($this->prefix . $offset, $value, $this->lifetime);
}

/**
* {@inheritdoc}
*/
public function offsetUnset($offset)
{
apcu_delete($this->prefix . $offset);
}
}

0 comments on commit 17c8518

Please sign in to comment.