1

我不知道是否有人可以帮助我,但无论如何我都会问。我正在创建一个函数,比如token_get_all用 javascript 编写的 php。这个函数应该“标记”给定的 php 代码,但我对空格有一些问题。

在 php 中执行该token_get_all函数我看到只有一些空格被认为是标记,其他的被忽略。

有人可以解释一下这个函数如何处理空格吗?你有没有找到一些关于它的文档?

更新

<?php
if ($var == 0)
{
?>
  • Beetween php 和 if: 忽略
  • 在 if 和 (: 标记化之间
  • Beetween $var 和 =: 标记化
  • Beetween = 和 0:标记化
  • Beetween ) 和 {: 标记化
  • Beetween { 和 ?>:标记化
4

2 回答 2

1

事实上,它永远不会被忽视。Zend 词法分析器总是返回空格,用于高亮/缩进。

"<?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
于 2010-01-28T14:56:39.620 回答
1

我找到了解决方案。通常在 php open tags: 之后忽略空格<?php<?但不是<?=

更新

花了 2 个小时,但我已经理解了这种行为:)。 <?php<?获得以下空格字符或换行字符(前面是否有 \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"....

我已经测试了一整天,所以我确信它的行为是这样的。

于 2010-01-28T15:26:20.263 回答