Sobes.tech
Middle

Тамактануу көз караштарды киргизүү деген эмне жана ал PHP өнүгүүдө кандай колдонулат?

sobes.tech AI

AIден жооп

Тийиштүү көзкараштардын (DI) киргизилиши — бул долбоорлоо үлгүсү, ал бир объектке башка объекттен же фреймворкдан көзкараштарды алууга мүмкүндүк берет, өзү түзбөстөн. Бул класстардын көзкарашдарын башкарууну жеңилдетет жана кодду көбүрөөк ийкемдүү, тестирлөөчү жана оңдоого жеңил кылат.

PHPда DI колдонулат:

  • Туташтырылууну азайтуу (coupling): Класстар өз көзкараштарына конкреттүү ишке ашырылыштарга катуу байланбаган.
  • Бирдиктүү тестирлөөнү жөнөкөйлөтүү: Реалдуу көзкараштарды mock-объекттер менен оңой алмаштырып, тест жүргүзүүгө болот.
  • Ийкемдүүлүк жана кеңейтүү мүмкүнчүлүгүн жогорулатуу: Көзкараштарды өзгөртүү же алмаштыруу оңой, ал колдонуп жаткан классты өзгөртпөстөн.

Көзкараштарды киргизүүнүн үч негизги ыкмасы бар:

  1. Конструктор аркылуу киргизүү (Constructor Injection): Көзкараштар класстын конструкторуна аргументтер катары берилет. Бул эң каалаган ыкма, анткени ал объект түзүлгөндө керек болгон көзкараштарды камсыз кылат.

    <?php
    class DatabaseConnection
    {
        // Базанын байланышынын деталдары
    }
    
    class UserRepository
    {
        private DatabaseConnection $db;
    
        public function __construct(DatabaseConnection $db)
        {
            $this->db = $db;
        }
    
        // Репозиторий методдору
    }
    
    // Көзкараш киргизүү менен объект түзүү
    $db = new DatabaseConnection();
    $userRepository = new UserRepository($db);
    
  2. Сеттер аркылуу киргизүү (Setter Injection): Көзкараштар жалпы жеткиликтүү методдор аркылуу киргизилет. Бул көзкараштарды опционалдуу кылууга мүмкүндүк берет.

    <?php
    class Logger
    {
        // Лог жүргүзүү
    }
    
    class UserService
    {
        private ?Logger $logger = null; // Опционалдуу көзкараш
    
        public function setLogger(Logger $logger): void
        {
            $this->logger = $logger;
        }
    
        public function doSomething(): void
        {
            if ($this->logger) {
                $this->logger->log("Бир нерсе кылып жатабыз...");
            }
            // Негизги логика
        }
    }
    
    // Объект түзүү жана опционалдуу көзкараш киргизүү
    $userService = new UserService();
    $logger = new Logger();
    $userService->setLogger($logger);
    
  3. Интерфейс аркылуу киргизүү (Interface Injection): Кажет болгон класс интерфейсин ишке ашырып, ал аркылуу көзкарашты орнотуу ыкмасы. PHPда ал биринчи эки ыкмадан азыраак кеңири таралган.

Реалдуу PHP колдонмолорунда көбүнчө Көзкараштарды киргизүү контейнерлери (Dependency Injection Containers) колдонулат. Бул китепканалар же фреймворклер автоматташтырып, объекттерди жана алардын көзкараштарын түзүүнү жана киргизүүнү жеңилдетет. Контейнер класс көзкарашдарын анализдеп, автоматтык түрдө керектүү объекттерди түзүп жана киргизе алат.

Популярдуу DI-контейнерлердин мисалдары:

  • PHP-DI
  • Symfony\DependencyInjection
  • Laravel Service Container (Laravelге кирет)

Контейнерди колдонуу:

<?php
// Псевдо-контейнер менен мисал
// Адатта, контейнер конфигурация аркылуу орнотулат (YAML, PHP массивдери жана башка)

// Контейнер конфигурациясы (жөнөкөйлөштүрүлгөн)
$container->set(DatabaseConnection::class, function() {
    return new DatabaseConnection(); // Объект түзүү
});

$container->set(UserRepository::class, function($container) {
    // DatabaseConnection көзкарашын киргизүү менен UserRepository түзүү
    return new UserRepository($container->get(DatabaseConnection::class));
});

// Объектти контейнерден алуу — контейнер өзү көзкараштарды түзүп жана киргизет
$userRepository = $container->get(UserRepository::class);

Жыйынтыктап айтканда, PHPда көзкараштарды киргизүү — бул ийкемдүү, тестирлөөчү жана оңдоого оңой код түзүү үчүн негизги үлгү, өзгөчө чоң долбоорлордо жана фреймворк колдонууда.