确定 PHP_CodeSniffer 是否正在嗅探摘要(或最终)class

Identify if PHP_CodeSniffer is Sniffing an abstract (or final) class

我正在 PHP_CodeSniffer 中编写 Sniff 以检查 class 名称,我的抽象 class 名称与非抽象 classes 有一些不同的命名要求.

如何确定当前 Sniff 是否正在嗅探摘要 class?

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

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

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_ABSTRACTabstract class 会 return FALSE,final class 仍然是 TRUE。

您还需要 class 中的以下代码才能使上述代码正常工作:

$tokens = $phpcsFile->getTokens();

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

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