我一直在浏览Wordpress插件的代码并找到以下内容:
eval( '?>' . $foo . '<?php ' );
我很好奇是否有某些具体情况我不知道这是输出$foo
变量的正确方法。这只是插件作者的古怪或者我应该知道的事情吗?我本来会用echo
...
更新:
感谢所有好的反馈。我现在面对的是我没有想到模板场景。具体来说,这发生在WP Super Cache插件中。我想我必须仔细看看是否有必要。我认为在所有PHP已经处理完毕后,Super Cache缓存了Wordpress的html输出......
答案 0 :(得分:6)
在这种情况下,$foo
是一个字符串(可能)可以包含内嵌的PHP代码。因此,要执行此PHP代码,字符串必须为eval
'ed。
尽管如此,除了非常范围狭窄的情况之外,使用eval通常是不受欢迎的,因为它可能导致恶意代码的执行。 (即:如果$foo
有可能是用户提供的字符串,那么使用eval
可能会导致灾难性的后果。)
有关详细信息,请参阅现有的When is eval evil in php?问题/答案。
答案 1 :(得分:2)
那不是输出变量。 $foo
最有可能包含一个模板,其中嵌入了其他<?=$code();?>
个代码段。
在此eval中使用关闭和打开PHP标记来从内联代码切换回HTML模式。这个eval()或多或少等于:
include("data:,$foo"); // treat $foo string as if it was include script
答案 2 :(得分:-1)
让我再说一遍:c.r.a.p
如果eval()是答案,那你几乎就是 当然问错了。
Rasmus Lerdorf