Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menggunakan bekas Inversion of Control (IoC) dengan rangka kerja Nette?

Bagaimana untuk menggunakan bekas Inversion of Control (IoC) dengan rangka kerja Nette?

王林
王林asal
2023-06-03 22:21:01693semak imbas

Nette ialah rangka kerja aplikasi web sumber terbuka berdasarkan bahasa PHP. Salah satu ciri terasnya ialah bekas Inversion of Control (IoC), yang membolehkan kami mengurus objek dan memisahkan komponen aplikasi kami melalui suntikan kebergantungan.

Dalam artikel ini, kami akan mendalami bekas IoC Nette Framework dan mempelajari cara menggunakannya dalam aplikasi anda untuk meningkatkan kualiti dan kebolehselenggaraan kod.

Langkah 1: Konfigurasikan bekas IoC

Dalam rangka kerja Nette, fail konfigurasi bekas IoC terletak di app/config/config.neon secara lalai. Kami perlu mentakrifkan perkhidmatan kami dalam fail ini dan kemudian merujuknya di tempat lain dalam aplikasi.

Berikut ialah contoh mudah yang mentakrifkan perkhidmatan yang dipanggil logger:

perkhidmatan:

logger:
    class: AppLogger

Di sini, kami mentakrifkan kelas yang dipanggil AppLogger Serve. Tidak perlu membuat instantiat di sini kerana bekas IoC akan membuat instantiat secara automatik apabila diperlukan. Kita hanya perlu mentakrifkannya dalam bekas perkhidmatan dan kita boleh menggunakannya.

Langkah 2: Akses perkhidmatan

Terdapat dua cara untuk mengakses perkhidmatan dalam bekas IoC. Cara pertama ialah menyuntik perkhidmatan dalam pembina pengawal, seperti ini:

gunakan NetteApplicationUIController;

class ExampleController extends Controller
{

private $logger;

public function __construct(AppLogger $logger)
{
    $this->logger = $logger;
}

public function renderDefault()
{
    $this->logger->log('Hello, world!');
}

}

Di sini, kami menyuntik perkhidmatan logger melalui pembina pengawal. Kita boleh menggunakannya seperti objek biasa.

Cara kedua ialah menggunakan ciri suntikan automatik rangka kerja Nette. Kami hanya perlu menandakan perkhidmatan sebagai parameter pembina untuk suntikan automatik, dan bekas suntikan kebergantungan akan menyuntiknya secara automatik. Ini boleh dicapai dengan:

gunakan NetteApplicationUIController;

class ExampleController extends Controller
{

/** @var AppLogger @inject */
public $logger;

public function renderDefault()
{
    $this->logger->log('Hello, world!');
}

}

Di sini, kami menandakan harta $logger jenis AppLogger dan gunakan tag @Inject untuk memberitahu rangka kerja Nette untuk menyuntiknya.

Langkah 3: Gunakan tag

Kadangkala, kita perlu menyuntik perkhidmatan lain dalam pembina perkhidmatan. Untuk menyelesaikan masalah ini, rangka kerja Nette menyediakan konsep tag. Teg ialah rentetan yang mewakili perkhidmatan (atau set perkhidmatan). Apabila bekas IoC membuat instantiate objek, ia menyemak parameter pembina objek dan, jika parameter ditanda, menyuntik perkhidmatan yang diwakili oleh tanda.

Berikut ialah contoh yang mentakrifkan dua perkhidmatan (logger dan pangkalan data) dan menggunakan tag untuk menyuntiknya ke dalam objek Kalkulator:

perkhidmatan:

logger:
    class: AppLogger

database:
    class: AppDatabase

calculator:
    class: AppCalculator
    arguments:
        - @logger
        - @database

Di sini, kami mentakrifkan tiga perkhidmatan: pembalak, pangkalan data dan kalkulator. Logger dan pangkalan data diisytiharkan sebagai perkhidmatan biasa, dan kalkulator menggunakan tag dalam hujah untuk merujuk kepada perkhidmatan logger dan pangkalan data. Ambil perhatian bahawa tag bermula dengan simbol @.

Sekarang, apabila kita membuat instantiate objek Kalkulator, bekas IoC secara automatik menyuntik logger dan perkhidmatan pangkalan data dan menghantarnya kepada pembina objek Kalkulator.

Ringkasan

Dalam artikel ini, kami menyelam lebih mendalam ke dalam bekas IoC rangka kerja Nette dan mempelajari cara menggunakannya dalam aplikasi kami. Menguasai pengetahuan asas bekas IoC boleh membantu kami menulis kod PHP yang lebih baik dan meningkatkan kualiti dan kebolehselenggaraan kod. Harap artikel ini membantu anda!

Atas ialah kandungan terperinci Bagaimana untuk menggunakan bekas Inversion of Control (IoC) dengan rangka kerja Nette?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn