Pre-compile Ray.Di bindings to PHP code for maximum performance. The compiled injector runs faster than the standard injector by avoiding runtime reflection and binding resolution.
composer require ray/compilerRay.Compiler provides two main components:
Compiler: Compiles Ray.Di bindings into PHP code.CompiledInjector: High-performance injector that executes pre-compiled code.
Pre-compile your dependencies:
use Ray\Compiler\Compiler;
$compiler = new Compiler();
// Compile Ray.Di bindings to PHP files
$compiler->compile(
$module, // AbstractModule: Your application's module
$scriptDir // string: Directory path where compiled PHP files will be generated
);Use the compiled injector:
use Ray\Compiler\CompiledInjector;
$injector = new CompiledInjector($scriptDir);
$instance = $injector->getInstance(YourInterface::class);Create a compile script:
try {
$scripts = (new Compiler())->compile(
new AppModule(),
__DIR__ . '/di'
);
printf("Compiled %d files.\n", count($scripts));
} catch (CompileException $e) {
fprintf(STDERR, "Compilation failed: %s\n", $e->getMessage());
exit(1);
}Add compile script to your composer.json:
{
"scripts": {
"post-install-cmd": ["php bin/compile.php"]
}
}Compiled DI code is considered an environment-specific build artifact and should not be committed to version control. This approach ensures that your repository remains clean and build artifacts do not cause merge conflicts or unexpected behavior across different environments.
Add the compile directory to your .gitignore:
/tmp/di/- LLM Documentation - Brief documentation optimized for LLMs
- Complete LLM Documentation - Full documentation with architecture details
