Ключевые слова, такие как continue
, break
и return
, которые влияют на поток управления программой, нельзя использовать непосредственно внутри eval
для достижения желаемого результата. eval
- это функция, и функция не может изменить поток управления кода, который ее вызывает, кроме как путем генерирования исключения.
Поскольку continue
просто означает «перейти к следующей итерации цикла»", и это эквивалентно" не выполнять остальную часть кода в этом блоке ", вы могли бы переписать свой код, чтобы вместо этого сделать остаток блока условным для оператора if
. Если код выглядит как
for( $i = 0; $i < 10; $i++ ) {
if( $i == 5 ) {
continue;
}
// do more things
}
, его можно легко переписать как
for( $i = 0; $i < 10; $i++ ) {
if( $i != 5 ) {
// do more things
}
}
, и теперь он имеет форму, которая может быть eval
'd:
// your code
$plugin_code = 'if( $i = 5 ) {
// do more things
}';
// framework code
for( $i = 0; $i < 10; $i++ ) {
eval($plugin_code);
}
Однако это все еще влияет только на поток управления кода, который вы передаете в платформу. Невозможно изменить поток управления самого кода платформы.