PHP-使用代码解析字符串时出错

PHP-使用代码解析字符串时出错,php,string,parsing,version,Php,String,Parsing,Version,我对一些过去在PHP4.X中工作而在PHP5.2.4中不工作的代码有问题 首先,有一个代码的小例子,与导致问题的代码类似。不幸的是,我无法用一个小例子重现这个问题 <?php class Example{ public function showExample() { $ind = 1; $m = "method"; $str2 = "{call method}"; $str2 = str_replace("{call $m}" , "<

我对一些过去在PHP4.X中工作而在PHP5.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();
?>
我可以通过删除“\”来修复警告,但这会改变代码的语义,因此不太可能

现在,最奇怪的是我可以通过中断或删除序列来删除这两个错误“ 这似乎在版本上有所不同,但我在变更日志中找不到任何提及


现在我从Cryo那里得到了一个有效的解决方案:拆分字符串

 "<?php" 

“我的猜测是PHP正在重新打开PHP标签
Cryo的做法是正确的,尽管我认为实际问题是PHP在双引号字符串中计算变量。但是,斜杠应防止对变量求值。因此:

$a = "somestring"
$b = "\$a" // -> \$a
$c = '\$a' // -> \$a

我认为字符串的求值方式很奇怪,\+$myVar的求值方式很奇怪。

好主意!它现在工作正常,尽管它仍然不能回答“为什么”?;)顺便说一句,我也尝试了第二种选择,但它不起作用,但错误消息发生了变化:PHP解析错误:语法错误,意外的t_常量_ENCAPSED_字符串位于/Users/giove/Sites/mundial/htmltemplate.PHP第252行,我将检查此解决方案是否适用于所有其他类似情况。谢谢@我找不到任何关于这种方式的参考,这确实很奇怪。这个问题似乎与我对生成的代码所做的工作无关,但它似乎与它的编写方式有关,即它是一个解析/语法错误,而不是一个解释/语义错误。正如我之前说过的,最奇怪的是,相同的代码在一个文件中是可以的,但在另一个文件中会产生错误。我将继续关注这个问题,并尝试查找有关解析过程的信息。
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
 "<?php" 
$str2 = "<?" . "php print( \$myVar$myVar2 );  ?>";
$str2 = '<?php print( $myVar' . $myVar2 . ' );  ?>';
$a = "somestring"
$b = "\$a" // -> \$a
$c = '\$a' // -> \$a