【问题标题】:What is the token that represents a simple assignment (=) in PHP?PHP 中表示简单赋值 (=) 的标记是什么?
【发布时间】:2013-10-22 01:46:03
【问题描述】:

我期待找到一个简单的T_EQUALT_ASSIGN 来作为= here in PHP's parser token list 的令牌,但它不存在。

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

【问题讨论】:

  • @Dagon 为什么不呢?我假设这是因为 = 是单个字符,而所有其他标记都由多个字符组成。您的评论可能需要一些扩展。
  • 我想你不需要令牌列表,而是操作码列表:检查php.net/manual/en/internals2.opcodes.assign.php
  • 嗯,我刚刚学习了一些新东西!我对 Antilogical 的帮助不大,但多亏了你的帖子,我现在有一些东西要读了。 +1

标签: php token


【解决方案1】:

如果你运行这段代码:

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

您会看到=; 不是令牌。

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

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

【讨论】:

猜你喜欢
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 2020-11-16
  • 1970-01-01
  • 2019-08-07
  • 2012-04-12
相关资源
最近更新 更多