Я искал альтернативу eval () способу выполнения кода, содержащегося в строковой переменной, и заметил preg_replace
с модификатором /e
.
Тем не менее, код оценивается довольно странно.
Например, echo()
приводит к ошибке в php 5.3.6:
<?php
$code = 'echo( \'Hello, world!\'.PHP_EOL)';
preg_replace('/(.*)/e', $code, '' );
?>
Сообщение об ошибке:
Ошибка разбора: синтаксическая ошибка, неожиданный T_ECHO в /Users/.../test.php(4): код регулярного выражения в строке
Неустранимая ошибка: preg_replace (): не удалось вычислить код:
echo ('Hello, world!'. PHP_EOL) в /Users/.../test.php в строке 4
Пока print()
работает и выдает Привет, мир! :
<?php
$code = 'print( \'Hello, world!\'.PHP_EOL)';
preg_replace('/(.*)/e', $code, '' );
?>
Также кажется, что из нескольких строк кода выполняется только первая:
<?php
$t=1;
$code = '$t++;$t++;';
preg_replace('/(.*)/e', $code, '' );
echo $t;
?>
Выходы 2 , а не 3 .
Вопрос : документирована ли эта оценка кода в PCRE в preg_replace()
где-нибудь?
Не найдено на php.net