PHPCS-实例化时强制使用类名大小写

PHPCS-实例化时强制使用类名大小写,php,phpcs,Php,Phpcs,我正在使用PHPC检查我的类名是否符合规则PEAR.NamingConventions.ValidClassName 它可以很好地用于类声明: class My_Class {} // Valid class My_class {} // Invalid - expected behaviour 实例化时是否有检查类名的规则 new My_class() // Should complain about invalid class name My_class::someMethod() //

我正在使用PHPC检查我的类名是否符合规则
PEAR.NamingConventions.ValidClassName

它可以很好地用于类声明:

class My_Class {} // Valid
class My_class {} // Invalid - expected behaviour
实例化时是否有检查类名的规则

new My_class() // Should complain about invalid class name
My_class::someMethod() // Should complain too

我最终写下了自己的嗅探

当它找到
新的
或带有
的静态调用时,它会检查类名:

<?php

namespace MySniffs\Sniffs\Classes;

use PHP_CodeSniffer\Sniffs\Sniff;
use PHP_CodeSniffer\Files\File;

class MySniffs_Sniffs_Classes_ConsistentClassNameCaseSniff implements Sniff
{
    /**
     * Returns the token types that this sniff is interested in.
     *
     * @return array(int)
     */
    public function register() {
        return array(T_NEW, T_DOUBLE_COLON);

    }//end register()


    /**
     * Processes this sniff, when one of its tokens is encountered.
     *
     * @param \PHP_CodeSniffer\Files\File $phpcsFile The current file being checked.
     * @param int                         $stackPtr  The position of the current token in the
     *                                               stack passed in $tokens.
     *
     * @return void
     */
    public function process(File $phpcsFile, $stackPtr) {
        $tokens = $phpcsFile->getTokens();
        $token = $tokens[$stackPtr];

        if ($token['type'] === 'T_NEW') {
            $className = $phpcsFile->findNext(T_STRING, $stackPtr);
        } elseif ($token['type'] === 'T_DOUBLE_COLON') {
            $className = $phpcsFile->findPrevious(T_STRING, $stackPtr);
        }
        $name = trim($tokens[$className]['content']);

        $words = explode('_', $name);
        foreach ($words as $word) {
            if (!preg_match("/^[A-Z]/", $word)) {
                $phpcsFile->addError(
                    'Invalid class name case : ' . $name,
                    $stackPtr,
                    'ClassNameCase',
                    array('message' => 'Boom')
                );
            }
        }
    }//end process()
}

我最终编写了自己的嗅探

当它找到
新的
或带有
的静态调用时,它会检查类名:

<?php

namespace MySniffs\Sniffs\Classes;

use PHP_CodeSniffer\Sniffs\Sniff;
use PHP_CodeSniffer\Files\File;

class MySniffs_Sniffs_Classes_ConsistentClassNameCaseSniff implements Sniff
{
    /**
     * Returns the token types that this sniff is interested in.
     *
     * @return array(int)
     */
    public function register() {
        return array(T_NEW, T_DOUBLE_COLON);

    }//end register()


    /**
     * Processes this sniff, when one of its tokens is encountered.
     *
     * @param \PHP_CodeSniffer\Files\File $phpcsFile The current file being checked.
     * @param int                         $stackPtr  The position of the current token in the
     *                                               stack passed in $tokens.
     *
     * @return void
     */
    public function process(File $phpcsFile, $stackPtr) {
        $tokens = $phpcsFile->getTokens();
        $token = $tokens[$stackPtr];

        if ($token['type'] === 'T_NEW') {
            $className = $phpcsFile->findNext(T_STRING, $stackPtr);
        } elseif ($token['type'] === 'T_DOUBLE_COLON') {
            $className = $phpcsFile->findPrevious(T_STRING, $stackPtr);
        }
        $name = trim($tokens[$className]['content']);

        $words = explode('_', $name);
        foreach ($words as $word) {
            if (!preg_match("/^[A-Z]/", $word)) {
                $phpcsFile->addError(
                    'Invalid class name case : ' . $name,
                    $stackPtr,
                    'ClassNameCase',
                    array('message' => 'Boom')
                );
            }
        }
    }//end process()
}