Я пишу Sniff в PHP_CodeSniffer для проверки имен классов, и мои абстрактные имена классов имеют некоторые разные требования к именованию для неабстрактных классов.
Как я могу определить, использует ли текущий Sniff абстрактный класс или нет?
Благодаря zerkms для направления меня в правильном направлении.
Чтобы проверить, читает ли текущий Sniff abstract
или же final
класс, используйте следующий код:
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
в приведенном выше коде он вернул бы FALSE для abstract
класс, и все еще ИСТИННО для final
учебный класс.
Вам также понадобится следующий код в классе, чтобы код работал:
$tokens = $phpcsFile->getTokens();
Я протестировал приведенный выше код, и он работает так, как я обрисовал в общих чертах в этом ответе.
Надеюсь, что в настоящее время ограниченная информация в Интернете для PHP_CodeSniffer поможет кому-то еще.
Не стесняйтесь предлагать изменения или редактировать этот ответ.
Других решений пока нет …