krubio / perfect-container
A lightweight, reflection-based dependency injection container designed for simplicity and ease of use, enabling automatic resolution and management of class dependencies throughout your PHP application.
Requires
- php: >=8.2.0
Requires (Dev)
- codeception/codeception: ^5.0
- codeception/module-asserts: *
- phpstan/phpstan: ^1.10
README
PerfectContainer
Description
PerfectContainer is a lightweight, easy-to-use Dependency Injection Container designed for PHP applications. It facilitates the management of class dependencies, promoting a clean and decoupled codebase. PerfectContainer allows developers to bind interfaces to concrete implementations, making it easier to swap out dependencies without modifying the dependent classes.
Features
- Simple API: Easy to use API for binding and resolving dependencies.
- Singleton Binding: Bind classes as singletons to reuse the same instance across the application.
- Auto-Resolving: Automatically resolve dependencies through type-hinted constructor injection.
- PSR-11 Compliant: Adheres to the PSR-11 Container Interface standard.
Upcoming Changes in Version 2.0.0
In Version 2.0.0, we are introducing a method renaming for improved consistency:
- Method Renaming: The
bind
method will be renamed toset
. This change is aimed at providing clearer semantics and aligning with standard practices in dependency injection containers.
Deprecation Notice
Starting from Version 1.1.0, the bind
method is deprecated, and we encourage you to start using set
to align with the upcoming changes in Version 2.0.0.
- Deprecated: The
bind
method is deprecated and will be removed in a future release (Version 2.0.0). Please update your usage toset
to ensure compatibility with future versions.
We encourage you to update your usage accordingly to ensure compatibility with the latest version of PerfectContainer.
Installation
Use Composer to install the PerfectContainer library.
composer require krubio/perfect-container
Usage
Here's a basic usage example of PerfectContainer:
require 'vendor/autoload.php'; use PerfectApp\Container\Container; $container = new Container(); // Binding and resolving dependencies $container->set('SomeInterface', 'SomeImplementation'); $instance = $container->get('SomeInterface');
Contributing
Contributions, issues, and feature requests are welcome!
License
This project is MIT licensed.