InterMix
is a modern, lightweight PHP toolkit for developers who love class-oriented design, clean architecture, and fast execution. From dependency injection to dynamic macros, every utility is designed to just work โ with minimal config and maximum control.
once()
and memoize()
helpers for deterministic cachingpipe()
, retry()
, measure()
, flatten()
, and morecomposer require infocyph/intermix
Supported PHP versions:
InterMix Version | PHP Version |
---|---|
2.x.x and above | 8.2 or newer |
1.x.x | 8.0โ8.1 compatible |
use function Infocyph\InterMix\container;
$c = container();
$c->definitions()->bind('now', fn () => new DateTimeImmutable());
echo $c->get('now')->format('c');
Enable autowiring with attributes:
$c->options()->setOptions(
injection: true,
methodAttributes: true,
propertyAttributes: true
);
Tag-based resolution:
$c->definitions()->bind('a', A::class, tags: ['service']);
$c->definitions()->bind('b', B::class, tags: ['service']);
foreach ($c->findByTag('service') as $svc) {
$svc()->handle();
}
See full container guide at: ๐ https://intermix.readthedocs.io/en/latest/di/overview.html
MacroTest::mix(new class {
public function hello($name) {
return "Hey, $name!";
}
});
echo (new MacroTest)->hello('Ali'); // Hey, Ali!
once()
Memoizationuse function Infocyph\InterMix\Remix\once;
$value = once(fn() => rand(1000, 9999)); // Only runs once per file+line
Full documentation available on ReadTheDocs:
๐ https://intermix.readthedocs.io
Includes:
composer install
composer test
Got ideas or improvements? Join us!
๐ Open issues ๐ฌ Submit a PR โ we welcome quality contributions
MIT Licensed โ use it freely, modify it openly.