PHP eval的替代方案?

时间:2013-07-23 19:20:47

标签: php eval

我有一些代码在变量中返回到我的脚本。我需要将其作为PHP代码执行,但使用eval函数时我很紧张。以下是包含文件中生成的代码:

/include.php:

$preLoadFields .=   '$2 = new KoolDatePicker("datepicker");                                    
                     $2->id="field_2";                              
                     $2->scriptFolder = "/KoolPHP";

/main.php

eval($preLoadFields);

即使我尝试使用eval运行它,我也会收到此错误:

解析错误:语法错误,意外的'2'(T_LNUMBER),期待变量(T_VARIABLE)或'$'

有没有更好/更安全的方法来实现这一目标?提前谢谢!

2 个答案:

答案 0 :(得分:3)

$2不是有效的PHP变量名称:http://www.php.net/manual/en/language.variables.basics.php

必须以字母字符开头。允许格式的正则表达式详细信息位于上面的链接页面中。

在更大的方案中,你不应该使用eval()。这是一个非常危险的功能。为什么不简单地将它作为PHP代码和include()呢?

include.php:

<?php
$var = new KoolDatePicker('datepicker');
$var->id="field_2"
$var->scriptFolder = '/KoolPHP';

main.php:

<?php
include('include.php');

答案 1 :(得分:3)

只是不要让include.php在变量中生成PHP代码。 但是直接执行它。

$2 = new KoolDatePicker("datepicker");                                    
$2->id="field_2";                              
$2->scriptFolder = "/KoolPHP";

如果您担心生成HTML并将其输出到屏幕。 然后不要使用ob_start ob_get_contents ob_end_clean输出它:

ob_start();
$2 = new KoolDatePicker("datepicker");                                    
$2->id="field_2";                              
$2->scriptFolder = "/KoolPHP";
$generated_html = ob_get_contents();
ob_end_clean();

PHP将尝试输出到屏幕的任何内容都将被缓冲。 然后在您的代码中使用$generated_html变量将其输出到任何您想要的位置。

(您仍然需要修复无效的变量名称)