jeroen / generic-decorator
通用和类型安全的装饰器构建器
0.1.2
2017-02-06 21:03 UTC
Requires
- php: >=7.0
- phpunit/phpunit-mock-objects: ~3.2 || ~4.0
Requires (Dev)
- mediawiki/mediawiki-codesniffer: ~0.6.0
- squizlabs/php_codesniffer: ~2.5
This package is auto-updated.
Last update: 2024-09-16 22:47:17 UTC
README
PHP装饰器的构建器
用法
此库提供了遵循构建器模式的DecoratorBuilder
类,因此其使用方式与PHPUnit的MockBuilder接口相似。
通过调用DecoratorBuilder::newBuilder
并传入要装饰的对象来构造一个新的构建器。然后可以调用withBefore
和withAfter
来定义装饰后的行为。最后调用newDecorator
并获取装饰后的实例。
public function __construct() { $this->repository = new DoctrineKittenRepository( /* ... */ ); $this->stopWatch = new Stopwatch(); } public function newProfilingKittenRepository(): KittenRepository { return DecoratorBuilder::newBuilder( $this->repository ) ->withBefore( function() { $this->stopWatch->start( 'KittenRepository' ); } ) ->withAfter( function() { $this->stopWatch->stop( 'KittenRepository' ); } ) ->newDecorator(); }
传递给withBefore
和withAfter
的可调用对象接收装饰方法接收的所有参数。
->withBefore( function() { $this->logger->alert( 'KittenRepository', [ 'arguments' => func_get_args() ] ); } )
缺少的功能/路线图
- 允许装饰生成的装饰器(目前这将导致致命错误)
- 支持try-catch,例如用于日志装饰器
- 提供一个方法来获取调用方法的名字(有人知道如何在不使用疯狂debug_backtrace技巧的情况下做到这一点吗?)
- 测试私有和受保护的方法的存在
- 测试最终类
- 测试异常
- 测试对公共方法的内部调用
发布说明
0.1.2 (2017-02-06)
- 现在可以与PHPUnit Mock Objects 4.x一起安装
0.1.1 (2016-08-16)
- 现在可以装饰需要构造函数参数的类
0.1.0 (2016-07-29)
- 初始发布