PHP-使用代码解析字符串时出错
我对一些过去在PHP4.X中工作而在PHP5.2.4中不工作的代码有问题 首先,有一个代码的小例子,与导致问题的代码类似。不幸的是,我无法用一个小例子重现这个问题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}" , "<
<?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