icio / scope
0.4
2014-09-25 20:54 UTC
Requires (Dev)
- phpspec/phpspec: ~2.0
This package is not auto-updated.
Last update: 2024-09-24 03:08:07 UTC
README
Scope 提供了一种机制,用于在回调过程中准备全局环境和容器,将状态变更和清理仅限于代码中的声明。灵感来自 Python 的原生 with 语句。
例如,您可以使用以下方式替代
global $x; $xBackup = $x; $x = $xNew; $done = do_it(); $x = $xBackup;
with KeyState 设置数组键状态
(new KeyState($GLOBALS, array("x" => $newX)))->call('do_it');
目前可用的作用域可以帮助
- 使用
Scope收集多个作用域; - 使用
KeyState在数组上设置临时值; - 使用
Buffer捕获函数输出; - 使用
WorkingDirectory切换到新目录; - 以及使用
ErrorReporting关注不同的错误级别。
有时您可能需要在特定作用域中跳进跳出,通过跟踪您的操作引起的变更来提供默认上下文。作用域可以可选地处理这种情况。例如,Buffer 可以收集多会话的输出;WorkingDirectory 在重新进入时可以回到离开的目录;KeyState 可以跟踪键值,如果它们在作用域内被更改;以及 ErrorReporting 可以跟踪报告的任何变更。请参阅规范测试以获取详细信息。
所有输入的作用域都会作为函数参数传递给回调。例如,当与输出缓冲区一起工作时,您可以如此捕获并返回输出
$output = (new Scope( new Buffer(Buffer::CLEAN), new WorkingDirectory("./old") ))->call(function(Buffer $buffer) { require "old-script.php"; return $buffer->getContents(); });
如果在回调期间抛出异常,我们将关闭作用域并重新抛出异常。如果作用域抛出异常,我们将清理任何已输入的作用域并重新抛出异常。在尝试退出作用域时抛出的异常将阻止清理其他作用域(这可能需要改变)。