我不知道是否有人可以帮助我,但无论如何我都会问。我正在创建一个像javascript编写的php token_get_all
这样的函数。这个函数应该“标记”一个给定的PHP代码,但我有一些空格问题。
在php中执行token_get_all
函数我发现只有一些空格被认为是令牌,其他空格被忽略。
有人可以解释一下这个函数如何用空格表示?你有没有找到一些关于它的文件?
更新
<?php
if ($var == 0)
{
?>
答案 0 :(得分:1)
实际上,它永远不会被忽视。 Zend lexer总是返回空格,用于突出显示/缩进目的。
"<?php if" (one space) is two tokens: "<?php " -- note the space -- and "if")
"<?php if" (two spaces) is three tokens: "<?php ", T_WHITESPACE + "if"
示例:
$t = token_get_all("<?php echo 1;?>");
echo token_name($t[1][0]); // T_ECHO
$t = token_get_all("<?php echo 1;?>");
echo token_name($t[1][0]); // T_WHITESPACE
答案 1 :(得分:1)
我找到了解决方案。通常在php打开标记后忽略空格:<?php
,<?
但不是<?=
花了2个小时,但我明白了行为:)。
<?php
和<?
还会获得以下空格字符或新行char(以\ r或不符号)。其余的空格在其他标记中解析,但如果它们遵循第一个空格则分组。让我用你的例子更好地解释一下:
<?php echo "test"?>
代币:“<?php
”,“echo
”....
<?php echo "test"?>
代币:“<?php
”,“(剩余的空格)”,“echo
”......
新行的另一个例子:
<?php
echo "test"
?>
代币:“<?php
\ n”,“echo
”....
<?php
echo "test"
?>
代币:“<?php
\ n”,“\ n \ n(剩余的新行)”,“echo
”....
我一整天都在测试它,所以我确信它的行为就像这样。