【问题标题】:Identify if PHP_CodeSniffer is Sniffing an abstract (or final) class确定 PHP_CodeSniffer 是否正在嗅探抽象(或最终)类
【发布时间】:2015-03-09 20:50:36
【问题描述】:

我正在 PHP_CodeSniffer 中编写一个 Sniff 来检查类名,我的抽象类名与非抽象类有一些不同的命名要求。

如何识别当前 Sniff 是否正在嗅探抽象类?

【问题讨论】:

  • 如果您正在实现自己的嗅探 - abstract 关键字将在令牌流中。
  • 你目前有什么?您是否正在实施自己的嗅探?
  • 这是“令牌堆栈”部分。阅读并检查一些捆绑的嗅探。
  • 好吧,我清楚地看到了令牌流中的“抽象”:ideone.com/pH4DG8“我还没有跳过足够多的圈子来回答我的问题吗?” --- 你的问题太模糊了abstract IS 在令牌流中。你没有为你目前拥有的东西提供任何东西。 “没有发现任何有用的东西” --- 没用,请查看链接 - 它IS THERE

标签: php phpcodesniffer


【解决方案1】:

感谢zerkms 为我指明了正确的方向。

要检查当前 Sniff 是否正在读取 abstractfinal 类,请使用以下代码:

if (in_array(
  $tokens[($stackPtr - 2)]['code'], 
  array(T_ABSTRACT, T_FINAL)
) === true 
) {
  // TRUE - class is abstract or final
} else {
  // FALSE - class is NOT abstract or final
}

删除T_ABSTRACT T_FINAL 将删除对该类型的检查。

即如果没有上面代码中的T_ABSTRACT,它将为abstract 类返回FALSE,而对于final 类仍然返回TRUE。

您还需要在课堂上使用以下代码,以使上述代码正常工作:

$tokens = $phpcsFile->getTokens();

我已经测试了上面的代码,它的工作原理和我在这个答案中概述的一样。
由于目前互联网上有关 PHP_CodeSniffer 的信息有限,希望这对其他人有所帮助。

随时提出修改建议或修改此答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 2013-11-28
    • 2012-03-03
    • 2010-12-18
    • 2020-10-02
    相关资源
    最近更新 更多