PHPackages                             idrinth/quickly - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. idrinth/quickly

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

idrinth/quickly
===============

A fast dependency injection container featuring build time resolution.

1795[1 PRs](https://github.com/Idrinth/quickly/pulls)PHPCI passing

Since Sep 14Pushed 3mo ago1 watchersCompare

[ Source](https://github.com/Idrinth/quickly)[ Packagist](https://packagist.org/packages/idrinth/quickly)[ RSS](/packages/idrinth-quickly/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (2)Used By (0)

Quickly
=======

[](#quickly)

[![Unittest](https://github.com/Idrinth/quickly/actions/workflows/php-unittest.yml/badge.svg)](https://github.com/Idrinth/quickly/actions/workflows/php-unittest.yml)

A fast dependency injection container for PHP featuring build-time resolution and PSR-11 compliance.

Features
--------

[](#features)

- ✅ **PSR-11 Compliant** - Fully compatible with PSR-11 Container Interface
- ⚡ **Build-time Resolution** - Pre-compile dependency graphs for maximum performance
- 🔧 **Autowiring** - Automatic dependency resolution using reflection
- 🌍 **Environment Injection** - Direct injection of environment variables
- 🏭 **Factory Pattern Support** - Flexible object creation with custom factories
- 💤 **Lazy Initialization** - Defer object creation until needed
- 🔄 **Circular Dependency Detection** - Prevents infinite dependency loops
- 📋 **Validation Tools** - Command-line tools for configuration validation
- 🔗 **Expandable** -a fallback container to the container handles cases not covered by it

Requirements
------------

[](#requirements)

- PHP 8.4 or higher
- PSR Container 2.0.2+

Installation
------------

[](#installation)

```
composer require idrinth/quickly
```

Quick Start
-----------

[](#quick-start)

### Basic Usage

[](#basic-usage)

```
use Idrinth\Quickly\EnvironmentFactory;

// Create container factory
$factory = new EnvironmentFactory();
$container = $factory->createContainer();

// Get services
$myService = $container->get(MyService::class);
```

### With Reflection (Development Mode)

[](#with-reflection-development-mode)

Set the `DI_USE_REFLECTION=true` environment variable to enable automatic dependency resolution:

```
// Your environment
$_ENV['DI_USE_REFLECTION'] = 'true';

// Container will automatically resolve dependencies
$container = $factory->createContainer();
$service = $container->get(SomeService::class);
```

Dependency Injection Attributes
-------------------------------

[](#dependency-injection-attributes)

### Environment Variable Injection

[](#environment-variable-injection)

```
use Idrinth\Quickly\DependencyInjection\EnvironmentInject;

class DatabaseService
{
    public function __construct(
        #[EnvironmentInject('DATABASE_URL')]
        private string $databaseUrl,

        #[EnvironmentInject('DB_TIMEOUT')]
        private int $timeout = 30
    ) {}
}
```

### Factory-based Resolution

[](#factory-based-resolution)

```
use Idrinth\Quickly\DependencyInjection\ResolveWithFactory;
use Idrinth\Quickly\DependencyInjection\Factory;

class MyFactory implements Factory
{
    public function pickImplementation(string $parameter, string $key, string $forClass): string
    {
        return ConcreteImplementation::class;
    }
}

class ServiceConsumer
{
    public function __construct(
        #[ResolveWithFactory(MyFactory::class, 'implementation-key')]
        private SomeInterface $service
    ) {}
}
```

### Lazy Initialization

[](#lazy-initialization)

```
use Idrinth\Quickly\DependencyInjection\LazyInitialization;

#[LazyInitialization]
class ExpensiveService
{
}
```

Looking at your overwrites implementation, here's what I would add to the README:

Overwrites
----------

[](#overwrites)

Overwrites allow you to specify exact dependency resolutions for specific constructor parameters, bypassing automatic resolution logic. This is particularly useful for configuration-specific dependencies, testing scenarios, or when you need precise control over what gets injected.

### Configuration File

[](#configuration-file)

Create an overwrites configuration file at `.quickly/overwrites.php`:

```
