picamator / object-manager
创建对象的实用工具
1.2.0
2017-04-04 19:24 UTC
Requires
- php: ~5.6|~7.0
Requires (Dev)
- phpunit/phpunit: ~5.5
- satooshi/php-coveralls: ~1.0
This package is not auto-updated.
Last update: 2024-09-28 20:30:35 UTC
README
主分支
开发分支
Object Manager 是一个用于构建对象的类工具,它提供了一个 Singleton 包装器和单元测试存根助手。
主要用途包括
- 重构旧代码,以单元测试风格进行,同时不破坏向后兼容性
- 在单一位置创建新实例
安装
更新你的 composer.json
文件
{ "require": { "picamator/object-manager": "~1.0" } }
需求
示例
旧代码
假设应用程序有一个 UserRepository
<?php class UserRepository { private $connection; public function __construct() { $this->connection = new Connection(); } }
这里的 Connection
实例是在构造函数内部创建的,这使得它很难 模拟 进行单元测试。
保持向后兼容性的一个解决方案是使用 ObjectManagerSingleton
<?php class UserRepository { private $connection; public function __construct() { $this->connection = ObjectManagerSingleton::getInstance()->create('Connection'); } }
在单元测试中,在运行测试之前需要用模拟的 ObjectManagerSingleton
存根,即调用 ObjectManagerSingleton::setInstance($mockObjectManager)
。这样就可以为 Connection
类打开模拟的大门。
请点击链接找到示例源代码和单元测试。
工厂模式
假设应用程序有一个 ConnectionFactory
<?php class ConnectionFactory { public function create() { return new Connection(); } }
使用 ObjectManager
可以重写为
<?php class ConnectionFactory { private $objectManager; private $className; public function __construct(ObjectManager $objectManager, $className = 'Connection') { $this->objectManager = $objectManager; $this->className = $className; } public function create() { return $this->objectManager->create($this->className); } }
结果,可以使用依赖注入来覆盖 $className
的新实现。利用 PHP 7 的功能,ConnectionFactory
可能看起来像
<?php declare(strict_types=1); class ConnectionFactory { private $objectManager; private $className; public function __construct(ObjectManager $objectManager, string $className = 'Connection') { $this->objectManager = $objectManager; $this->className = $className; } public function create() : ConnectionInterface { return $this->objectManager->create($this->className); } }
请点击链接找到示例源代码和单元测试。
统计
假设应用程序需要收集对象统计信息,而不使用任何额外的工具。解决方案可能是使用 ObjectManager
在开发环境中进行注入。
请点击链接找到示例源代码和单元测试。
文档
开发
要配置开发环境,请
- 点击Docker 安装步骤
- 在 Docker 容器中运行
composer install
贡献
要开始帮助项目,请查看 CONTRIBUTING。
许可
ObjectManager 在 MIT 许可下发布。有关详细信息,请参阅 LICENSE 文件。