0

我最近一直在研究一个编码标准,并想根据这个标准使用代码嗅探器来检查我的文件。因为我是 Codesniffer 的新手,所以我想在创建自己的标准之前先测试标准。

然而,我遇到了代码嗅探器的问题,我不确定这是一个错误还是我做错了什么。

pear install CodeSniffer在我尝试在我的测试文件上使用不同的标准之后,我使用命令行命令安装了 pear install code sniffer :

<?php 
public class Application_IndexController() {

    DEFINE WEBSITE_URL = 'https://localhost/';

    public $avast = '';
    private $_ye = '';
    protected $_swabs = '';

    public setAvast($avast){
        $this->avast = $avast;
    }

    private getYe(){
        return $this->_ye;
    }

    protected changeProtected($_swabs){
        if($_swabs && $this->swabs) {
            $this->_swabs = $swabs;
        } elseif($swabs) {
            $this->_swabs = $swabs;
        } else {
            return null;
        }
    }

    public iDontKnowWhatImDoing($harhar) {
        Switch($harhar) {
            case 1:
                $yargh = "Avast ye "
                       . "swabs!";
                echo $yargh;
                break;
            default:
                $array = array(
                               "Sailor 1", "Sailor 2", "Sailor 3", 
                               "Sailor 4", "Sailor 5", "Sailor 5"
                               );
                break;
        }
    }
}
?>

可以说我在写这个文件时心情很傻,但无论如何它都实现了它的目的。

我已经在这个文件上运行了所有标准,其中只有几个真正起作用,另一个似乎一直返回相同的错误。

'generic'、'psr1' 和 'psr2' 标准工作得非常好,但 'phpcs'、'pear'、'mysource'、'zend' 和 'squiz' 标准都会导致一个错误:

$stackPtr is not a class member var

包括 phpcs 自己的标准在内,8 个中有 5 个不起作用,这似乎很奇怪。

4

1 回答 1

0

首先,您收到该错误消息的原因是您的文件存在解析错误。类定义不正确,DEFINE WEBSITE_URL = 'https://localhost/';也不是有效的 PHP 代码。function在可见性关键字之后也缺少所有函数声明。

检查它运行的解析错误的最佳方法php -l /path/to/code(这是一个小写的 L)。

PHPCS 实际上并不像 PHP 那样解析您的文件。相反,它是一个静态代码分析器,但它确实会遇到代码看起来错误且无法继续的情况。这只是其中一种情况。

其次,某些标准有效而某些无效的原因是因为所有标准都执行了不同的检查。许多标准共享这些检查。在这种特殊情况下,一些标准对变量名进行了检查,但由于函数声明不正确而失败。他们无法真正弄清楚失败的原因,因为他们在文件中太远了(121 个令牌),但他们知道出了点问题。我知道错误消息不是很有帮助,但足以让您知道发生了一些不好的事情并且文件存在问题。在这种情况下,解析错误。

总而言之:如果您修复了解析错误,所有 PHP_CodeSniffer 标准都将在您的代码上运行。

展望未来,php -l在 PHPCS 检查之前使用命令或将其包含到构建脚本(如果您使用持续集成)中检查代码中的解析错误总是有用的。

如果有帮助,这是您修复了解析错误的代码:

<?php
define('WEBSITE_URL', 'https://localhost/');
class Application_IndexController {

    public $avast = '';
    private $_ye = '';
    protected $_swabs = '';

    public function setAvast($avast){
        $this->avast = $avast;
    }

    private function getYe(){
        return $this->_ye;
    }

    protected function changeProtected($_swabs){
        if($_swabs && $this->swabs) {
            $this->_swabs = $swabs;
        } elseif($swabs) {
            $this->_swabs = $swabs;
        } else {
            return null;
        }
    }

    public function iDontKnowWhatImDoing($harhar) {
        Switch($harhar) {
            case 1:
                $yargh = "Avast ye "
                       . "swabs!";
                echo $yargh;
                break;
            default:
                $array = array(
                               "Sailor 1", "Sailor 2", "Sailor 3", 
                               "Sailor 4", "Sailor 5", "Sailor 5"
                               );
                break;
        }
    }
}
?>
于 2012-08-14T22:24:47.710 回答