eduluz1976 / pervasive
库函数,用于封装类方法,并动态添加其他可调用对象,允许在方法之前或之后执行某些操作。
dev-master
2018-11-23 07:59 UTC
Requires (Dev)
- phpunit/phpunit: =7.0
This package is auto-updated.
Last update: 2024-09-23 20:29:30 UTC
README
目的
pervasive
是一个库,允许封装对象并在某些方法(如 pre
、pos
和 guard
事件)中注入一些行为。这允许动态测试自定义流程,而无需修改已投入生产的代码。
使用方法
示例
以 UserController
类为例,
<?php class UserController { public function addNewUser() { // ... } }
此方法接收用户数据,进行验证,将其插入数据库,并向用户界面返回 JSON 消息以提供反馈。
假设我们想要检查该用户是否已存在于第三方服务提供商中,用服务提供商提供的另一个电子邮件地址替换已通知的电子邮件地址。
注意:假设有一个 Request
类的对象,该对象管理所有请求,并且可以在全局范围内访问。
在启动脚本和执行控制器请求的点之间的一些脚本中
<?php use \eduluz1976\pervasive\Builder; use \eduluz1976\pervasive\Mock; // Wrapping UserController into Builder Builder::design(UserController::class) ->_() // this calls the MockBuilder, that add dynamic behaviour on wrapped classes. ->addPreFunction( 'addNewUser', function (Mock $container = null) { $email = Request::get('email'); $newEmail = ExternalServiceProviderAPI::checkEmail($email); if ($newEmail) { Request::set('email', $newEmail); } } );
执行控制器的文件中
<?php // Getting a new instance of the wrapped class $controller = Builder::build ( UserController::class ) ; $controller->addNewUser();