Определите, является ли PHP_CodeSniffer Sniffing абстрактным (или конечным) классом

Я пишу Sniff в PHP_CodeSniffer для проверки имен классов, и мои абстрактные имена классов имеют некоторые разные требования к именованию для неабстрактных классов.

Как я могу определить, использует ли текущий Sniff абстрактный класс или нет?

1

Решение

Благодаря 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 поможет кому-то еще.

Не стесняйтесь предлагать изменения или редактировать этот ответ.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]