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.