У меня проблема с некоторым кодом, который работал в PHP 4.X и не работает в PHP 5.2.4
Прежде всего, есть небольшой пример кода, аналогичного тому, который вызывает проблему. К сожалению, я не смог воспроизвести проблему на небольшом примере.
<?php
class Example{
public function showExample()
{
$ind = 1;
$m = "method";
$str2 = "{call method}";
$str2 = str_replace("{call $m}" , "<?php print( \$pre$ind ); ?>", $str2);
echo $str2 . "\n";
}
}
$e = new Example();
$e -> showExample();
?>
Что этот код делает, так это строит строку с некоторым php-кодом для последующего выполнения. В частности, сгенерированный код напечатает значение переменной с именем «$ pre» + номер переменной. В этом случае вывод будет следующим:
<?php print( $pre1 ); ?>
Все отлично работает с этим кодом. Проблема в том, что когда я использую его в контексте гораздо большего класса, это является частью фреймворка, который я использовал в течение долгого времени. Я не могу вставить сюда весь источник класса, но проблемные строки следующие (я немного упростил их, чтобы удалить str_replace, но ошибка все еще появляется):
$myVar = "value";
$myVar2 = 2;
$str2 = "<?php print( \$myVar$myVar2 ); ?>";
Когда я загружаю файл, я получаю следующие два сообщения:
PHP Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /Users/giove/Sites/mundial/htmltemplate.php on line 252
PHP Parse error: syntax error, unexpected T_VARIABLE in /Users/giove/Sites/mundial/htmltemplate.php on line 252
Я могу исправить предупреждение, удалив '\', но это меняет семантику кода, поэтому это нереально.
Теперь, самое странное, я могу удалить обе ошибки, нарушив или удалив последовательность "
Кажется, это разница в версиях, но я не смог найти упоминаний об этом в журналах изменений.
Теперь у меня есть рабочее решение от Cryo: разбить строку
"<?php"
для предотвращения его «оценки» (я не уверен, действительно ли это оценка).
Тем не менее, я все еще хотел бы знать причину этого странного поведения.
Крио: спасибо за помощь, я отмечу вопрос как ответивший через пару дней.