gixx / worstpractice-dependency-injection
一个简单的依赖注入容器
1.1.0
2022-11-10 12:46 UTC
Requires
- php: >=8.2
- psr/container: 2.0.2
Requires (Dev)
- friendsofphp/php-cs-fixer: v3.2.1
- jetbrains/phpstorm-attributes: ^1.0
- phpmd/phpmd: 2.13.0
- phpstan/phpstan: 1.9.0
- phpunit/phpunit: 9.5.26
- roave/security-advisories: dev-master
- squizlabs/php_codesniffer: 4.0.x-dev
- thecodingmachine/phpstan-strict-rules: v1.0.0
This package is auto-updated.
Last update: 2024-09-23 14:55:33 UTC
README
DIY 依赖注入
系列文章《DIY 依赖注入容器》的完整源代码,包括第 1、2 和 3 部分。
目的
唯一目的是实践
- PHP 7.4, 8.0, 8.1 和 8.2 特性
- 保持编码标准
- 编写干净的代码
- 编写严格类型的代码
- 单元测试
尽管我相信它像任何其他 DIC 一样工作,但我不建议在生产环境中使用它。遗憾的是,Scrutinizer CI 侧的代码质量检查目前还不支持 PHP 8.2。
安装
要将此包添加到您的项目,只需通过 composer 获取即可
composer require gixx/worstpractice-dependency-injection
使用
要使用它,您只需要一个配置,如下例所示
namespace MyNamespace; use WorstPractice\Component\DependencyInjection\ConfigParser\ArrayParser; use WorstPractice\Component\DependencyInjection\ServiceLibrary; use WorstPractice\Component\DependencyInjection\Container; $config = [ 'ServiceAlias' => [ 'class' => \Namespace\To\MyClass::class, 'arguments' => [ \Namespace\To\OtherClassInterface::class, 'literalParameter' => 1234, 'otherLiteralParameter' => false ], 'shared' => false ], \Namespace\To\OtherClassInterface::class => [ 'class' => \Namespace\To\OtherClass::class, 'shared' => true ], \DateTimeZone::class => [ 'arguments' => [ 'param' => 'Europe/Berlin' ], 'shared' => true ], \DateTime::class => [ 'calls' => [ ['setTimezone', [\DateTimeZone::class]] ], 'shared' => true ], 'Auth' => [ // empty, will be determined later ], 'OtherServiceAlias' => [ 'inherits' => 'ServiceAlias', 'calls' => [ ['someMethod', ['parameter1' => 4543, 'parameter2' => [0, 1, 2], \DateTime::class]] ], 'shared' => true ], 'LoginController' => [ 'class' => \Namespace\To\Controller\Login:class, 'arguments' => [ 'Auth', 'OtherServiceAlias' ] ] ]; $container = new Container(new ServiceLibrary(new ArrayParser()), $config); $authService = $_ENV['environment'] === 'dev' ? new \Namespace\To\DebugAuthService() : new \Namepace\To\Strict\AuthenticationService(); $isShared = true; $container->set('Auth', $authService, $isShared); $controller = $container->get('LoginController');
此 DIC 仅在请求或被请求的类引用时才实例化任何类。它还支持将实例添加到 DIC 中。当脚本需要基于某些计算的实例时,它非常有用。
测试
该包包含一个简单的 Docker 设置,可以运行测试。为此,您只需运行以下命令
docker-compose up -d
docker exec -it worstpractice-dependency-injection-php-fpm php composer.phar install
docker exec -it worstpractice-dependency-injection-php-fpm php composer.phar check
以下测试将运行
- PHP lint
- PHP Mess Detector
- PHP Unit
- PHPStan(最大级别,无忽略错误)
以下测试现在已忽略 PHP 7.4 版本的测试,因为它们尚不支持 PHP 8.2
- PHP-CS-Fixer
- PHP Code Sniffer

