首页 > 解决方案 > php eval() 中的语句

问题描述

在提供使用 eval() 实现的钩点的 PHP 框架中,我试图从 eval() 调用中中断或继续循环。这就是我正在尝试的

框架循环像

...
for( $i = 0; $i < 10; $i++ ) {
    // framweork code here ...
    eval( $plugin_code );
    // framweork code here ...
}
...

$plugin_code 包含 PHP 代码 - 在这个示例中

if( $i == 5 ) {
    continue;
}

它导致此错误

PHP Fatal error:  'continue' not in the 'loop' or 'switch' context

如果 eval() 确实只计算表达式而不能计算语句- 那么我如何在 eval() 中实现 continue / break 语句?

标签: phpeval

解决方案


暂且不谈机制evalcontinue我认为有一个更基本的观点:当编写“插入”到另一个系统的代码时,你只能做那个系统允许你做的事情

如果钩子系统只是执行你给它的代码(无论是通过eval、回调函数还是任何其他机制),你就不能用它来控制主框架代码中的循环流等。

如果框架想让你这样做,它必须为你的插件提供一种机制来向框架发回你想要它做什么的信号——你可以以一种特定的方式注册插件,从回调中返回一个特定的值,设置特定变量等。

如果您不想直接修改框架,您唯一的选择是向框架的作者请求这样的功能。


推荐阅读