4

我期待在 PHP 的解析器令牌列表中找到一个简单的T_EQUALT_ASSIGN成为此处的令牌,但它不存在。=

那么用什么记号来表示赋值操作呢?假设我有$x = 1;,它以 开头T_VARIABLE,然后T_WHITESPACE是 ,然后=是数字所属的任何标记,然后以 结尾;。用什么标记来表示这些字符?

4

1 回答 1

3

如果您运行此代码:

var_dump(token_get_all('<?php $foo = "bar"; ?>'));

你会看到它=不是;令牌。

PHP手册说返回“ token_get_all......单个字符(即:;.>!等......),或者包含元素0中的标记索引的三元素数组,原始的字符串内容元素 1 中的标记和元素 2 中的行号。” 我解释这一点的方式是,单个字符不是标记。

尽管您可能会在“解析器标记列表”页面上注意到T_NS_SEPARATOR标记(即反斜杠)是单个字符。然而,由于 PHP 是用 C 编写的,并且由于 C 中仅包含反斜杠的字符数组实际上是两个字符(即"\\"),因此该标记实际上并不是引擎盖下的单个字符。这只是我的解释理论。

于 2013-10-22T01:57:21.930 回答