我本来希望在 PHP 的解析器标记列表中找到一个简单的T_EQUAL或T_ASSIGN作为此处的标记,但它不存在。=
那么用什么token来表示赋值操作呢?假设我有$x = 1;,它以 开头T_VARIABLE,然后是T_WHITESPACE,然后是=,然后是数字所属的任何标记,然后以 结束;。使用什么标记来表示这些字符?
如果您运行此代码:
var_dump(token_get_all('<?php $foo = "bar"; ?>'));
Run Code Online (Sandbox Code Playgroud)
你会看到它=并不是;令牌。
PHP手册说token_get_all返回“...单个字符(即:; , . , > , !等...),或包含元素 0 中的标记索引(原始字符串内容)的三元素数组元素 1 中的标记和元素 2 中的行号。” 按照我的解释,单个字符不是标记。
尽管您可能会在“解析器标记列表”页面上注意到T_NS_SEPARATOR标记(即反斜杠)是单个字符。然而,由于 PHP 是用 C 编写的,并且由于 C 中仅包含反斜杠的字符数组实际上是两个字符(即"\\"),因此该标记实际上并不是引擎盖下的单个字符。这只是我的解释理论。