Download the PHP package maduser/argon without Composer
On this page you can find all versions of the php package maduser/argon. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download maduser/argon
More information about maduser/argon
Files in maduser/argon
Package argon
Short Description A high-performance, modular, PSR-11 compliant dependency injection container for PHP.
License MIT
Informations about the package argon
Argon Service Container
A high-performance, PSR-11 compliant dependency injection container with optional compilation.
Strict when you want it, magic when you allow it
Argon compiles your service graph into native PHP code, eliminating reflection and runtime resolution overhead.
When no binding exists, it seamlessly falls back to autowiring constructors, closures, and methods — offering predictable, optimized performance when declared, and black magic convenient flexibility when not.
- Adaptable: strict or dynamic, compiled or runtime — it's up to you.
- Framework-agnostic: no vendor lock-in, no framework dependencies.
- Optimized for production: compiled output is pure PHP, ready for opcode caching.
- Feature-rich: lifecycle hooks, contextual bindings, decorators, and more.
- Predictable: clear and consistent API, no annotations, no attributes, no YAML. Just PHP.
Installation
Requires PHP 8.2+
Tests & QA
Usage
Binding and Resolving Services
Binding Arguments
When registering a service, you can provide constructor arguments using an associative array.
These arguments are matched by name to the constructor’s parameter list — no need for full signatures or complex configuration.
Set arguments during binding
These arguments are attached to the service binding and used every time it's resolved.
Override arguments during resolution (transients only)
This works only for transient services. Shared services are constructed once, and cannot be reconfigured at runtime.
Automatic Dependency Resolution
Argon will resolve Logger by class name, and skip env because it's optional.
What will NOT work:
In this case, you must bind the interface to a concrete class first and provide a default value for the primitive:
Parameter Registry
The parameter registry is a built-in key/value store used to centralize application configuration. It is fully compatible with the compiled container — values are embedded directly into the generated service code.
Use it to define reusable values, inject environment settings.
Set and retrieve values
Use parameters in bindings or at resolution
TIP: you can wrap the parameter registry with your own "ConfigRepository" and implement validation, scopes via dot notation, etc.
Factory Bindings
Use factory()
to bind a service to a dedicated factory class.
The factory itself is resolved via the container and may define either an __invoke()
method or a named method.
This resolves and calls ClockFactory::__invoke()
.
To use a specific method:
Contextual Bindings
Contextual bindings allow different consumers to receive different implementations of the same interface.
Service Providers
Service providers allow grouping service bindings and optional boot-time logic.
Interceptors
Interceptors allow you to hook into the service resolution lifecycle. They are automatically called either before or after a service is constructed.
Post-Resolution Interceptors
These are executed after a service is created, and can modify the object (e.g., inject metadata, call validation, register hooks).
Pre-Resolution Interceptors
These run before a service is instantiated. They can modify constructor parameters or short-circuit the entire resolution.
- Interceptors must implement either
PreResolutionInterceptorInterface
orPostResolutionInterceptorInterface
- Both require a static
supports(string $id): bool
method to prevent unnecessary instantiation - Interceptors are resolved lazily and only when matched
- You can register as many interceptors as you want. They're evaluated in the order they were added.
Extending Services
Extends an already-resolved service instance during runtime. Useful for wrapping, decorating, or modifying an existing service after resolution.
From this point on, all calls to get(LoggerInterface::class)
will return the wrapped instance.
Tags
Conditional Service Access
optional()
returns a proxy if the service is unavailable — safe for optional dependencies.
Closure Bindings with Autowired Parameters
Closure bindings are convenient for CLI tools, prototyping, or runtime-only services — but they're not suited for production graphs or compilation. Since closures can't be compiled, you must either:
- Register them during the boot() phase of a ServiceProvider, after compilation
- Or explicitly mark them as excluded from compilation via skipCompilation()
Compiling the Container
The compiled container is a pure PHP class with zero runtime resolution logic for standard bindings. It eliminates reflections and parameter lookups by generating dedicated methods for each service. All bindings, tags, parameters, and interceptors are statically resolved and written as native PHP code.
ArgonContainer
API
ArgonContainer | Parameters | Return | Description |
---|---|---|---|
set() |
string $id , Closure\|string\|null $concrete |
ArgonContainer |
Registers a service as shared by default (use ->transient() to override) |
get() |
string $id |
object |
Resolves and returns the service. |
has() |
string $id |
bool |
Checks if a service binding exists. |
getBindings() |
– | array<string, ServiceDescriptor> |
Returns all registered service descriptors. |
getContextualBindings() |
– | ContextualBindingsInterface |
Returns all contextual service descriptors. |
getDescriptor() |
string $id |
ServiceDescriptorInterface |
Returns the service description associated with the id. |
getParameters() |
– | ParameterStoreInterface |
Access the parameter registry for raw or shared values. |
registerInterceptor() |
class-string<InterceptorInterface> $class |
ArgonContainer |
Registers a type interceptor. |
registerProvider() |
class-string<ServiceProviderInterface> $class |
ArgonContainer |
Registers and invokes a service provider. |
tag() |
string $id , list<string> $tags |
ArgonContainer |
Tags a service with one or more labels. |
getTags() |
– | array<string, list<string>> |
Returns all tag definitions in the container. |
getTagged() |
string $tag |
list<object> |
Resolves all services tagged with the given label. |
boot() |
– | ArgonContainer |
Bootstraps all registered service providers. |
extend() |
string $id callable $decorator |
ArgonContainer |
Decorates an already-resolved service at runtime. |
for() |
string $target |
ContextualBindingBuilder |
Begins a contextual binding chain — call ->set() to define per-target bindings. |
getPreInterceptors() |
– | list<class-string<InterceptorInterface>> |
Lists all registered pre-interceptors. |
getPostInterceptors() |
– | list<class-string<InterceptorInterface>> |
Lists all registered post-interceptors. |
invoke() |
callable $target , array $params = [] |
mixed |
Calls a method or closure with injected dependencies. |
isResolvable() |
string $id |
bool |
Checks if a service can be resolved, even if not explicitly bound. |
optional() |
string $id |
object |
Resolves a service or returns a NullServiceProxy if not found. |
BindingBuilder
API
When you call set()
, it returns a BindingBuilder
, which lets you configure the binding fluently.
Method | Parameters | Return | Description |
---|---|---|---|
transient() |
– | BindingBuilder |
Marks the service as non-shared. A new instance will be created for each request. |
skipCompilation() |
– | BindingBuilder |
Excludes this binding from the compiled container. Useful for closures or dynamic logic. |
tag() |
string\|list<string> $tags |
BindingBuilder |
Assigns one or more tags to this service. |
factory() |
string $factoryClass , ?string $method = null |
BindingBuilder |
Uses a factory class (optionally a method) to construct the service. |
defineInvocation() |
string $methodName , array $args = [] |
BindingBuilder |
Pre-defines arguments for a later invoke() call. Avoids reflection at runtime. |
getDescriptor() |
– | ServiceDescriptorInterface |
Returns the internal service descriptor for advanced inspection or modification. |
License
MIT License