有些代码使用eval()
来执行存储在数组中的代码,如下所示:
// $oOwner is an object
$strId = "abc";
$strClass = "someClass";
$aParams = array('a' => 'atext', 'b' => 'btext');
$this->menu = array(
"Entry 1" => ' openForm(\$oOwner,\$strId,\$strClass,\$aParams); ',
// ...
);
数组键的值将直接输入eval()
函数。
现在我收到错误:Parse error: syntax error, unexpected T_VARIABLE, expecting T_STRING ... eval()'d code on line 1
有什么问题?
修改
遍历数组并eval()
值:
eval( $this->menu[$param[0]] );
编辑2:
现在:"Entry 1" => " openForm(\$this->owner,\$strId,\$strClass,\$aParams); "
使用双引号"..."
会导致PHP Notice: Undefined variable: strId in ... : eval()'d code on line 1
。也适用于其他变量。
`
答案 0 :(得分:0)
您使用的是单引号'
,因此您无需在变量中使用\$
概念教授使用单引号和双引号
function openForm(){
var_dump(func_get_args());
}
$strId = "abc";
$strClass = "someClass";
$aParams = array('a' => 'atext', 'b' => 'btext');
$oOwner = "ABC" ;
$menu = array(
"Entry 1" => ' openForm($oOwner,$strId,$strClass,$aParams); ',
"Entry 2" => " openForm(\$aParams,\$strId); "
);
eval($menu["Entry 1"]);
输出
array
0 => string 'ABC' (length=3)
1 => string 'abc' (length=3)
2 => string 'someClass' (length=9)
3 =>
array
'a' => string 'atext' (length=5)
'b' => string 'btext' (length=5)
array
0 =>
array
'a' => string 'atext' (length=5)
'b' => string 'btext' (length=5)
1 => string 'abc' (length=3)
答案 1 :(得分:0)
在声明代码为eval时,您是否尝试过双引号?
// ...
$this->menu = array(
"Entry 1" => " openForm(\$oOwner,\$strId,\$strClass,\$aParams); ",
// ...
);
答案 2 :(得分:0)
我尝试的方式总是导致错误,我想出了通过var_export()
将数组作为字符串放在那里的想法。
此处发布了2次尝试: Store array in a string to eval() later