如何創建支持依賴項注入(di)的 php 函數庫:創建 composer 包作為函數庫。實現函數庫功能,如在文件中實現一個問候函數。安裝 phpdi 容器并創建容器配置,將函數庫類作為工廠定義添加到容器中。在代碼中使用函數庫并注入依賴項,如使用容器獲取函數庫類的實例。在實際應用中,例如將用戶數據保存到數據庫,注入數據庫連接以提高靈活性。
如何創建 PHP 函數庫并使其支持依賴項注入
介紹
函數庫是 PHP 中代碼復用的強大工具。通過使用依賴項注入(DI),您可以編寫更靈活、可測試的函數庫。本文將向您介紹如何創建和使用支持 DI 的 PHP 函數庫。
創建函數庫
首先,您需要創建一個 Composer 包作為您的函數庫。使用 composer 包管理器,通過運行以下命令創建一個新包:
composer init
登錄后復制
填寫包信息,然后運行以下命令安裝 Composer 自動加載器:
composer install
登錄后復制
現在,在您的項目中創建一個新目錄,用作函數庫代碼。例如:
php └── vendor └── my-library └── src └── FunctionLibrary.php
登錄后復制
實現函數庫
在 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();
登錄后復制
使用函數庫
現在,您可以在代碼中使用您的函數庫并注入依賴項:
use MyLibrary\FunctionLibrary; use DI\Container; $container = new Container(); $functionLibrary = $container->get(FunctionLibrary::class); echo $functionLibrary->greet('John'); // 輸出:Hello, John!
登錄后復制
實戰案例
假設您有一個將用戶數據保存到數據庫的函數庫。您可以在依賴項注入中注入數據庫連接,從而使您的函數庫更加靈活和可測試:
namespace MyLibrary; class UserRepository { private $connection; public function __construct(\PDO $connection) { $this->connection = $connection; } public function persist(User $user): void { // 保存用戶到數據庫 } }
登錄后復制
然后,在容器配置中添加以下定義:
$containerBuilder->addDefinitions([ \PDO::class => \DI\factory(function () { return new \PDO('<a style='color:#f60; text-decoration:underline;' href="https://www.php.cn/zt/15713.html" target="_blank">mysql</a>:host=localhost;dbname=my_database', 'username', 'password'); }), 'MyLibrary\UserRepository' => \DI\factory(function (Container $container) { return new UserRepository($container->get(\PDO::class)); }) ]);
登錄后復制