jeroen/generic-decorator

通用和类型安全的装饰器构建器

0.1.2 2017-02-06 21:03 UTC

This package is auto-updated.

Last update: 2024-09-16 22:47:17 UTC


README

Build Status Latest Stable Version Download count

PHP装饰器的构建器

用法

此库提供了遵循构建器模式DecoratorBuilder类,因此其使用方式与PHPUnit的MockBuilder接口相似。

通过调用DecoratorBuilder::newBuilder并传入要装饰的对象来构造一个新的构建器。然后可以调用withBeforewithAfter来定义装饰后的行为。最后调用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();
}

传递给withBeforewithAfter的可调用对象接收装饰方法接收的所有参数。

->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)

  • 初始发布