【发布时间】:2019-11-01 07:36:38
【问题描述】:
在提供使用 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() 确实只评估 expressions 而不能评估 statements - 那么如何在 eval() 中实现 continue / break 语句?
【问题讨论】:
-
eval可以执行语句。阅读错误消息,它清楚地说明了问题所在。 -
continue;必须在词法上在循环内,不能在eval或函数中完成。 -
我很惊讶没有人这么说:
eval是在框架中创建“挂钩”的错误工具;运行时评估的代码很脆弱,难以调试,而且很容易变得不安全。如果这是您正在编写的框架,而不是您正在使用的框架,我强烈建议您修改此设计并查看其他框架如何为此目的使用回调和插件对象。 -
感谢您的回复。 @Barmar 我不明白为什么 continue 不应该在循环内。
-
您不能在
eval()中使用它,原因与您不能将continue语句放在循环中调用的函数中的原因相同。它必须在循环语句中以文本形式。