что за ошибка в этом eval-коде? - PullRequest
0 голосов
/ 05 января 2011
 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 ]

4 голосов
/ 05 января 2011

Вы не можете eval() закрытое утверждение типа class this {.Вы должны поместить весь блок в одну строку и запустить eval() один раз.

Тем не менее, вероятно, нет оснований использовать eval() в первую очередь.Что ты пытаешься сделать?

2 голосов
/ 05 января 2011

Как сказал Пекка, хотя вы можете добавить код к eval() в переменную следующим образом:

$textToEval = 'class this {  ';
$textToEval .= 'function this($l1,$l2) {
     if($l1==0) { throw new ErrorException("error"); }
     echo $l1.$l2;
     }}';
eval($textToEval);
2 голосов
/ 05 января 2011

eval принимает полный и действительный фрагмент кода php.class this { недопустимо, потому что в конце нет }.

...