asm89/yac

Yet another container

Package info

github.com/asm89/yac

pkg:composer/asm89/yac

Statistics

Installs: 12

Dependents: 0

Suggesters: 0

Stars: 12

Open Issues: 0

dev-master / 0.1.x-dev 2013-11-14 15:09 UTC

Requires

  • php: >=5.3.3

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT fa62fb29bd12bc98bea77dd8d712b484a8681ef3

dependency injectioncontainerservice location

This package is auto-updated.

Last update: 2026-06-29 01:01:13 UTC


README

Just remembered this gem from @crell at #tnphp: "Invent yet another container? You could call YAC, and shave it!" - igorwesome

Yet another container is yet another di container for PHP, inspired by Pimple and LazyMap. Basically blending the two together. When using it the LazyMap way it's very performant.

Defining parameters

$c = new Yac\Yac();
$c['env'] = 'dev';

Defining services

$c['session'] = function($c) { return new Session($c->env); };

Accessing parameters and services

$std = $c['std']; // pimple compatible
$std = $c->std; // "fast" LazyMap way

Performance

Yac is much faster than Pimple!

 $ php -n ./vendor/bin/athletic -p ./tests/YacPerformance/ -b ./tests/bootstrap.php -f GroupedFormatter
YacPerformance\YacPerformanceEvent
 fetch_service-performance
 Method Name Iterations Average Time Ops/s Relative
 ------------------------------ ---------- ------------ -------------- --------- ---------
 pimpleFetchService : [Baseline] [100,000 ] [0.0000042015409] [238,007.91486]
 yacFetchServicePimpleStyle : [100,000 ] [0.0000032225394] [310,314.27956] [76.70%]
 yacFetchServiceLazyMapStyle : [100,000 ] [0.0000027879906] [358,681.27057] [66.36%]

 fetch_initialized_service-performance
 Method Name Iterations Average Time Ops/s Relative
 ------------------------------ ---------- ------------ -------------- --------- ---------
 pimpleFetchInitializedService : [Baseline] [100,000 ] [0.0000010025978] [997,408.92228]
 yacFetchInitializedServicePimpleStyle: [100,000 ] [0.0000007377648] [1,355,445.46456] [73.59%]
 yacFetchInitializedServiceLazyMapStyle: [100,000 ] [0.0000002871366] [3,482,663.50475] [28.64%]

Known limitations

  • No parameter/service called __yac
  • All services are "shared", "prototype" services are not yet supported
  • ...