0Pricing
PHP Academy · บทเรียน

คอนเทนเนอร์ DependencyInjection

ลงทะเบียนบริการและเชื่อมโยงการพึ่งพาด้วยคอนเทนเนอร์ DI ของ Symfony

คอนเทนเนอร์ DependencyInjection เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน

Dependency Injection คืออะไร

Dependency Injection (DI) เป็นรูปแบบการออกแบบที่คลาสรับสิ่งที่ต้องพึ่งพาจากภายนอก แทนที่จะสร้างขึ้นภายในเอง ทำให้โค้ดสามารถทดสอบได้และเชื่อมโยงกันอย่างหลวม

คอมโพเนนต์ DI ของ Symfony

คอมโพเนนต์ symfony/dependency-injection ของ Symfony มีคอนเทนเนอร์ IoC ที่ทรงพลัง ซึ่งสามารถเชื่อมสายอัตโนมัติ กำหนดค่า และแคชคำจำกัดความของบริการได้

$ composer require symfony/dependency-injection

การสร้างคอนเทนเนอร์

สร้างคอนเทนเนอร์และลงทะเบียนบริการ

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

$container = new ContainerBuilder();

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

การเพิ่มอาร์กิวเมนต์ของตัวสร้าง

ส่งอาร์กิวเมนต์ของตัวสร้างไปยังคำจำกัดความของบริการ

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

การอ้างอิงบริการ

ฉีดบริการหนึ่งเข้าไปในอีกบริการหนึ่งโดยใช้ Reference

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

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

การดึงบริการ

ดึงบริการจากคอนเทนเนอร์ ระบบจะแก้ไขสิ่งที่ต้องพึ่งพาให้โดยอัตโนมัติ

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

การเชื่อมสายอัตโนมัติ

เมื่อเปิดใช้การเชื่อมสายอัตโนมัติ คอนเทนเนอร์จะตรวจสอบคำใบ้ชนิดและฉีดบริการที่ตรงกันให้โดยอัตโนมัติ

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

พารามิเตอร์

จัดเก็บค่าการกำหนดค่าเป็นพารามิเตอร์ของคอนเทนเนอร์

<?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

กำหนดบริการใน YAML (ต้องใช้ symfony/config และ symfony/yaml)

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

การคอมไพล์คอนเทนเนอร์

คอมไพล์คอนเทนเนอร์เพื่อเพิ่มประสิทธิภาพ ขั้นตอนนี้จะตรวจสอบคำจำกัดความและปรับกราฟบริการให้เหมาะสม

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

บริการแบบใช้ร่วมกันเทียบกับแบบไม่ใช้ร่วมกัน

โดยค่าเริ่มต้น บริการจะใช้ร่วมกัน (ซิงเกิลตัน) ตั้งค่า shared(false) เพื่อรับอินสแตนซ์ใหม่ทุกครั้งที่ดึงบริการ

สรุป

คอนเทนเนอร์ DI ของ Symfony ใช้ลงทะเบียน เชื่อมสาย และแก้ไขบริการ ใช้การเชื่อมสายอัตโนมัติเพื่อความสะดวก ใช้พารามิเตอร์สำหรับการกำหนดค่า และคอมไพล์คอนเทนเนอร์ในโปรดักชันเพื่อเพิ่มประสิทธิภาพ

ตรวจสอบอย่างรวดเร็ว

การเชื่อมสายอัตโนมัติทำอะไรในคอนเทนเนอร์ DI ของ Symfony

คำถามที่พบบ่อย

บทเรียน “คอนเทนเนอร์ DependencyInjection” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “คอนเทนเนอร์ DependencyInjection” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “คอนเทนเนอร์ DependencyInjection”

ลงทะเบียนบริการและเชื่อมโยงการพึ่งพาด้วยคอนเทนเนอร์ DI ของ Symfony คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “คอนเทนเนอร์ DependencyInjection” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม

ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. HttpFoundation: คำขอและการตอบกลับ
  2. คอนเทนเนอร์ DependencyInjection
  3. EventDispatcher: อีเวนต์แบบแยกส่วน
  4. คอมโพเนนต์คอนโซล: คำสั่ง CLI
← กลับไปที่ PHP Academy