php - 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 语句?
解决方案
暂且不谈机制eval
,continue
我认为有一个更基本的观点:当编写“插入”到另一个系统的代码时,你只能做那个系统允许你做的事情。
如果钩子系统只是执行你给它的代码(无论是通过eval
、回调函数还是任何其他机制),你就不能用它来控制主框架代码中的循环流等。
如果框架想让你这样做,它必须为你的插件提供一种机制来向框架发回你想要它做什么的信号——你可以以一种特定的方式注册插件,从回调中返回一个特定的值,设置特定变量等。
如果您不想直接修改框架,您唯一的选择是向框架的作者请求这样的功能。
推荐阅读
- visual-foxpro - 从两个表中搜索和替换值 VFP 9
- ruby-on-rails - Active Storage 清除方法为 NilClass 抛出未定义的方法 signed_id
- python - 如何在当前 Firefox/Mozilla 实例中从新窗口中抓取?
- python - 尝试通过鼠标输入在 Tkinter 中的 PhotoImage 上绘制圆圈时,不断出现错误“_tkinter.TclError:无法解析颜色“115”
- javascript - 重复的 Javascript 输出
- cloud-foundry - 网络套接字丢失与云铸造厂中 stompEndPoint 的连接
- c# - 如何使 Web 应用完全独立于 Web api
- javascript - 迭代本地 JSON 文件时如何省略“默认”条目?
- flutter - 附加到多个滚动视图的 ScrollController
- python - LDA Gensim OOM Exception 因为大语料库