PHP'de Dependency Injection Container Sıfırdan Yazmak

  • Konbuyu başlatan Konbuyu başlatan sysuser
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 22

sysuser

PREMİUM
Katılım
9 Kas 2025
Mesajlar
174
Tepki puanı
4
Cinsiyet
Kadın

PHP'de Dependency Injection Container Sıfırdan Yazmak​


Laravel, Symfony ve Slim'in arka planda nasıl çalıştığını anlamak için temel bir DI container yazmak son derece öğreticidir.

Temel Yapı​

PHP:
class Container {
    private array $bindings = [];

    public function bind(string $abstract, callable $factory): void {
        $this->bindings[$abstract] = $factory;
    }

    public function make(string $abstract): mixed {
        if (isset($this->bindings[$abstract])) {
            return ($this->bindings[$abstract])($this);
        }
        return $this->resolve($abstract);
    }

    private function resolve(string $class): mixed {
        $ref = new ReflectionClass($class);
        $params = $ref->getConstructor()?->getParameters() ?? [];
        $args = array_map(fn($p) => $this->make($p->getType()->getName()), $params);
        return $ref->newInstanceArgs($args);
    }
}

Autowiring için Reflection API type hint'lerini okur ve bağımlılıkları özyinelemeli olarak çözer. Singleton desteği için resolved[] dizisinde önbellekleme eklenebilir.
 
Geri
Üst