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字符会完美地解释所有症状.
确保'WHATEVER;'之后没有任何内容.即使是空格也会产生解析错误.我会删除该行并重新键入它,<enter>在键入分号后立即命中.
确保 EOT;真的在行的开始。
if ($muh="kuh") {
$foo = <<<EOT
some text text text
EOT;
}
Run Code Online (Sandbox Code Playgroud)