2015-03-09 4 views
1

Я пишу Sniff в PHP_CodeSniffer для проверки имен классов, а у моих абстрактных имен классов есть разные требования к именам для не-абстрактных классов.Определить, является ли PHP_CodeSniffer Sniffing абстрактным (или окончательным) классом

Как определить, действительно ли текущий Sniff обнюхивает абстрактный класс или нет?

+0

Если вы используете свой собственный нюх - ключевое слово 'abstract' будет находиться в потоке токенов. – zerkms

+0

Что у вас есть? Вы внедряете свой собственный нюх? – zerkms

+0

http://pear.php.net/manual/en/package.php.php-codesniffer.coding-standard-tutorial.php? – zerkms

ответ

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_ABSTRACTT_FINAL бы снять флажок для этого типа.

т.е. Без T_ABSTRACT в приведенном выше коде, он будет возвращать FALSE для abstract класса, и до сих пор ИСТИНА для final класса.

Вы также будете нуждаться в этом следующий код в классе, для того, чтобы приведенный выше код для работы:

$tokens = $phpcsFile->getTokens(); 

Я тестировал выше код и он работает, как я описал в этом ответе.
Имея ограниченную информацию в Интернете в настоящее время для PHP_CodeSniffer, надеюсь, это поможет кому-то еще.

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

Смежные вопросы