Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mencipta pustaka fungsi PHP dan menjadikannya menyokong suntikan pergantungan?

Bagaimana untuk mencipta pustaka fungsi PHP dan menjadikannya menyokong suntikan pergantungan?

WBOY
WBOYasal
2024-04-26 13:15:01390semak imbas

Cara mencipta pustaka fungsi PHP yang menyokong suntikan kebergantungan (DI): Cipta pakej Komposer sebagai pustaka fungsi. Laksanakan fungsi perpustakaan fungsi, seperti melaksanakan fungsi ucapan dalam fail. Pasang bekas PhpDI dan buat konfigurasi bekas, tambah kelas perpustakaan fungsi sebagai definisi kilang pada bekas. Gunakan perpustakaan dalam kod dan suntikan kebergantungan, seperti menggunakan bekas untuk mendapatkan contoh kelas perpustakaan. Dalam aplikasi praktikal, seperti menyimpan data pengguna ke pangkalan data, menyuntik sambungan pangkalan data untuk meningkatkan fleksibiliti.

如何创建 PHP 函数库并使其支持依赖项注入?

Cara mencipta pustaka fungsi PHP dan menjadikannya menyokong suntikan pergantungan

Pengenalan

Pustaka fungsi ialah alat yang berkuasa untuk penggunaan semula kod dalam PHP. Dengan menggunakan suntikan kebergantungan (DI), anda boleh menulis perpustakaan yang lebih fleksibel dan boleh diuji. Artikel ini akan menunjukkan kepada anda cara membuat dan menggunakan pustaka fungsi PHP yang didayakan DI.

Buat perpustakaan fungsi

Pertama, anda perlu mencipta pakej Komposer sebagai perpustakaan fungsi anda. Menggunakan pengurus pakej komposer, cipta pakej baharu dengan menjalankan arahan berikut:

composer init

Isikan maklumat pakej dan kemudian jalankan arahan berikut untuk memasang autoloader Komposer:

composer install

Sekarang, buat direktori baharu dalam projek anda untuk digunakan sebagai kod perpustakaan fungsi. Contohnya:

php
└── vendor
└── my-library
    └── src
        └── FunctionLibrary.php

Laksanakan pustaka fungsi

Dalam FunctionLibrary.php, laksanakan fungsi pustaka. Contohnya: FunctionLibrary.php 中,实现函数库功能。例如:

namespace MyLibrary;

class FunctionLibrary
{
    public function greet(string $name): string
    {
        return "Hello, $name!";
    }
}

配置依赖项注入

为了支持 DI,您需要使用一个容器来解决依赖项。本文将使用 PhpDI 容器。

在您的函数库包中安装 PhpDI:

composer require php-di/phpdi

接下来,在 src/config.php

$containerBuilder = new \DI\ContainerBuilder();
$containerBuilder->addDefinitions([
    'MyLibrary\FunctionLibrary' => \DI\factory(function () {
        return new FunctionLibrary();
    })
]);

$container = $containerBuilder->build();

Mengkonfigurasi Suntikan Ketergantungan

Untuk menyokong DI, anda perlu menggunakan bekas untuk menyelesaikan kebergantungan. Artikel ini akan menggunakan bekas PhpDI.

Pasang PhpDI dalam pakej perpustakaan anda:

use MyLibrary\FunctionLibrary;
use DI\Container;

$container = new Container();

$functionLibrary = $container->get(FunctionLibrary::class);

echo $functionLibrary->greet('John'); // 输出:Hello, John!
Seterusnya, buat konfigurasi kontena dalam src/config.php:
namespace MyLibrary;

class UserRepository
{
    private $connection;

    public function __construct(\PDO $connection)
    {
        $this->connection = $connection;
    }

    public function persist(User $user): void
    {
        // 保存用户到数据库
    }
}

Menggunakan perpustakaan

Sekarang, anda Anda boleh menggunakan perpustakaan anda dalam kod anda dan inject dependencies: 🎜
$containerBuilder->addDefinitions([
    \PDO::class => \DI\factory(function () {
        return new \PDO('mysql:host=localhost;dbname=my_database', 'username', 'password');
    }),
    'MyLibrary\UserRepository' => \DI\factory(function (Container $container) {
        return new UserRepository($container->get(\PDO::class));
    })
]);
🎜🎜Contoh Praktikal🎜🎜🎜Andaikan anda mempunyai perpustakaan yang menyimpan data pengguna ke pangkalan data. Anda boleh menyuntik sambungan pangkalan data dalam suntikan kebergantungan, menjadikan pustaka anda lebih fleksibel dan boleh diuji: 🎜rrreee🎜 Kemudian, tambah definisi berikut dalam konfigurasi bekas: 🎜rrreee

Atas ialah kandungan terperinci Bagaimana untuk mencipta pustaka fungsi PHP dan menjadikannya menyokong suntikan pergantungan?. 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