PHP Academy · leksjon

DependencyInjection-containeren

Registrer tjenester og koble sammen avhengigheter med Symfony DI-containeren.

Leksjon 2 av 413 trinn

DependencyInjection-containeren er en gratis leksjon i PHP Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i PHP Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i PHP Academy inneholder totalt 4 leksjoner.

Hva er avhengighetsinjeksjon?

Avhengighetsinjeksjon (DI) er et mønster der en klasse mottar avhengighetene sine utenfra i stedet for å opprette dem internt – noe som gjør koden testbar og løst koblet.

Symfony DI-komponenten

Symfonys symfony/dependency-injection-komponent tilbyr en kraftig IoC-container som kan autowire, konfigurere og hurtigbufre tjenestedefinisjoner.

$ composer require symfony/dependency-injection

Opprette en container

Bygg en container og registrer tjenester.

<?php
use Symfony\Component\DependencyInjection\ContainerBuilder;

$container = new ContainerBuilder();

// Register a service:
$container->register("logger", \App\Logger::class);

Legge til konstruktørargumenter

Send konstruktørargumenter til tjenestedefinisjoner.

<?php
$container->register("mailer", \App\Mailer::class)
    ->addArgument("smtp.example.com")
    ->addArgument(587);

Tjenestereferanser

Injiser én tjeneste i en annen ved hjelp av en Reference.

<?php
use Symfony\Component\DependencyInjection\Reference;

$container->register("email_service", \App\EmailService::class)
    ->addArgument(new Reference("mailer"))
    ->addArgument(new Reference("logger"));

Hente en tjeneste

Hent en tjeneste fra containeren. Avhengigheter løses automatisk.

<?php
$emailService = $container->get("email_service");
$emailService->send("user@example.com", "Welcome!");

Autowiring

Når autowiring er aktivert, inspiserer containeren typehint og injiserer samsvarende tjenester automatisk.

<?php
$container->register(EmailService::class)
    ->setAutowired(true);
// Constructor is: public function __construct(Mailer $mailer, Logger $logger)

Parametere

Lagre konfigurasjonsverdier som containerparametere.

<?php
$container->setParameter("mailer.host", "smtp.example.com");
$container->setParameter("mailer.port", 587);

// Reference in service definition:
$container->register("mailer", Mailer::class)
    ->addArgument("%mailer.host%")
    ->addArgument("%mailer.port%");

YAML-konfigurasjon

Definer tjenester i YAML (krever symfony/config og symfony/yaml).

# services.yaml
services:
    App\Mailer:
        arguments:
            - "%mailer.host%"
            - "%mailer.port%"

Kompilere containeren

Kompiler containeren for bedre ytelse. Dette validerer definisjonene og optimaliserer tjenestegrafen.

<?php
$container->compile();
// Dump to PHP cache file:
$dumper = new PhpDumper($container);
file_put_contents("CachedContainer.php", $dumper->dump());

Delte og ikke-delte tjenester

Som standard er tjenester delte (singleton). Angi shared(false) for å få en ny instans hver gang tjenesten hentes.

Sammendrag

Symfony DI-containeren registrerer, kobler sammen og løser tjenester. Bruk autowiring for enkelhets skyld, parametere for konfigurasjon, og kompiler containeren i produksjon for bedre ytelse.

Hurtigsjekk

Hva gjør autowiring i Symfony DI-containeren?

Gratis å komme i gang

Lær deg PHP med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
49
Leksjoner
195

Ofte stilte spørsmål

Er leksjonen «DependencyInjection-containeren» gratis?

Ja – hele teksten i «DependencyInjection-containeren» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av PHP Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i PHP Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «DependencyInjection-containeren»?

Registrer tjenester og koble sammen avhengigheter med Symfony DI-containeren. Du øver på PHP Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med PHP Academy?

Ingen tidligere erfaring er nødvendig. PHP Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «DependencyInjection-containeren»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne PHP Academy-leksjonen?

Ja. Alle PHP Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. HttpFoundation: Forespørsel og svar
  2. DependencyInjection-containeren
  3. EventDispatcher: Frikoblede hendelser
  4. Console-komponenten: CLI-kommandoer
← Tilbake til PHP Academy