这个评估代码中的错误是什么?

时间:2011-01-05 10:29:59

标签: php eval

 eval('class this {  ');

 eval('function this($l1,$l2) {
  if($l1==0) { throw new ErrorException("error"); }
  echo $l1.$l2;
  }}');

try {
 $t = new this(0,1);
}
catch(Exception $e) {
 echo $e->getMessage();
}

为什么这段代码不起作用?

错误:

Parse error: syntax error, unexpected $end, expecting T_FUNCTION in .......(4) : eval()'d code on line 1

Parse error: syntax error, unexpected '}' in.......(9) : eval()'d code on line 4

Fatal error: Class 'this' not found in .......on line 12

3 个答案:

答案 0 :(得分:4)

你不能eval()class this {这样的未公开声明。您必须将整个块放入一个字符串并运行eval()一次。

尽管如此,可能没有理由首先使用eval()。你想做什么?

答案 1 :(得分:2)

eval接受完整且有效的一段PHP代码。 class this {无效,因为最终没有}

答案 2 :(得分:2)

像Pekka说的那样,虽然你可以将代码附加到eval()这样的变量中:

$textToEval = 'class this {  ';
$textToEval .= 'function this($l1,$l2) {
     if($l1==0) { throw new ErrorException("error"); }
     echo $l1.$l2;
     }}';
eval($textToEval);