代码标准不正常

时间:2012-08-14 14:33:09

标签: standards pear codesniffer

我最近一直致力于编码标准,并希望使用codesniffer根据此标准检查我的文件。 因为我是Codesniffer的新手,所以我想在创建自己的标准之前先测试标准。

然而我遇到了codeniffer的问题,我不确定这是一个错误或我做错了什么。

在我尝试在我的测试文件上使用不同的标准后,我使用命令行命令pear install CodeSniffer安装了梨安装代码嗅探器:

<?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;
        }
    }
}
?>

我只想说在撰写​​此文件时我的心情相当愚蠢,但不管它满足了它的目的。

我在这个文件上运行了所有标准,其中只有少数实际工作,另一个似乎总是返回相同的错误。

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

$stackPtr is not a class member var

似乎很奇怪,8个中的5个只是不起作用,包括phpcs自己的标准。

1 个答案:

答案 0 :(得分:0)

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

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

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

其次,一些标准起作用的原因和一些标准不是因为所有标准都有不同的检查。许多标准都分享这些检查。在这种特殊情况下,某些标准会检查变量名称,但由于函数声明不正确,它们会失败。他们无法确定他们失败的原因,因为他们离文件太远(121个令牌),但他们知道出了问题。我知道错误消息并不是非常有用,但它足以让您知道发生了什么错误并且文件存在问题。在这种情况下,解析错误。

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

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

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

<?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;
        }
    }
}
?>