PHP heredoc解析错误

Joh*_*ths 3 php string heredoc

这会产生输出页面OK

$mystring = "<<<EOT";
Run Code Online (Sandbox Code Playgroud)

用以下产品替换它

解析错误:语法错误,第737行的file.php中的意外$ end

$mystring = <<<EOT
   This is some PHP text.
   It is completely free
   I can use "double quotes"
   and 'single quotes',
   plus $variables too, which will
   be properly converted to their values,
   you can even type EOT, as long as it
   is not alone on a line, like this:
EOT;
Run Code Online (Sandbox Code Playgroud)

关于是什么导致解析器窒息的任何想法?

我使用的是PHP 4.4.7.

只有一个文件才会发生此行为,所有其他行为都遵循PHP定义的功能.

我试图重述的是在程序行中可能出错的地方,以便PHP解析器在此失败中显示.

约翰

将文件内容更改为: -

<?php

$mystring = <<<WHATEVER
   This is some PHP text.
WHATEVER;
?>
Run Code Online (Sandbox Code Playgroud)

结果=

解析错误:语法错误,第5行的file.php中的意外$ end

任何线索

编辑

原始错误与T_ENCAPSED_AND_WHITESPACE此有关,可以用jQuery引起例如" if(x == y){$('#my_image').hide():}"在heredoc中的bigram"{$将启动解析器寻找php变量进行替换.

编辑

2个好的回答.

1)Ch4m3l3on - " <?php"vs" <?"处理.

2)Disintegrator - <q>与一个愚蠢的程序有类似的问题,坚持将BOM放在utf-8文件中(忽略首选项)</q>.

编辑

1)用单个块替换所有内容并不能解决问题或提供任何其他指针.

2)没有BOM(字节顺序标记),可惜这个或类似的majic字符会完美地解释所有症状.

Had*_*adi 9

你必须把你的结尾heredoc放在行的开头.如果您使用某些具有缩进的IDE,请将其删除!你的结尾heredoc必须与你的结束php标签垂直在同一行(


Dar*_*ren 7

确保'WHATEVER;'之后没有任何内容.即使是空格也会产生解析错误.我会删除该行并重新键入它,<enter>在键入分号后立即命中.

  • 显然问题不在于heredoc声明.问题必须在脚本中的其他位置.就像Pedro Cunha说的那样,检查大括号是否封闭不正确.此外,您可能想要用完整的短标签替换任何PHP短标签. (2认同)

And*_*ger 5

确保 EOT;真的在行的开始。

if ($muh="kuh") {
     $foo = <<<EOT
           some text text text
EOT;
}
Run Code Online (Sandbox Code Playgroud)