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