我最近一直致力于一个编码标准,并希望使用codesniffer来检查我的文件根据这个标准。因为我是Codesniffer的新手,所以我认为在创建自己的标准之前,我应该先测试一下这些标准。
然而,我遇到了codesniffer的问题,我不确定这是一个bug还是我做错了什么。
我让pear使用命令行命令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;
}
}
}
?>可以说,当我写这个文件的时候,我有一种相当愚蠢的心情,但不管它如何实现了它的目的。
我已经在这个文件上运行了所有的标准,实际上只有几个标准可以工作,其他的似乎总是返回相同的错误。
'generic','psr1‘和'psr2’标准工作得很好,而'phpcs','pear','mysource','zend‘和'squiz’标准都会导致一个错误:
$stackPtr is not a class member var这似乎相当奇怪,包括phpcs自己的标准在内,8个中有5个不能工作。
发布于 2012-08-15 06:24:48
首先,你得到这个错误信息的原因是因为你的文件有解析错误。类定义不正确,并且DEFINE WEBSITE_URL = 'https://localhost/';也不是有效的PHP代码。所有的函数声明在visibility关键字后也缺少function。
检查解析错误的最佳方法是运行php -l /path/to/code (这是一个小写的L)。
PHPCS实际上并不像PHP那样解析你的文件。相反,它是一个静态代码分析器,但它确实会进入代码看起来错误并且无法继续的情况。这只是其中的一个案例。
其次,一些标准起作用和一些不起作用的原因是因为所有的标准都有不同的检查。许多标准都共享这些检查。在这种特殊情况下,一些标准对变量名进行了检查,但由于函数声明不正确而失败。他们不能真正找出失败的原因,因为他们在文件中太远(121个令牌),但他们知道出了问题。我知道错误消息不是很有用,但它足以让您知道发生了一些不好的事情,文件有问题。在本例中,是解析错误。
因此,总而言之:如果您修复了解析错误,所有PHP_CodeSniffer标准都将在您的代码上运行。
接下来,在PHPCS检查之前,使用php -l命令或通过将其包含到构建脚本中(如果您使用持续集成)来检查代码中的解析错误总是很有用的。
如果有帮助,下面是修复了解析错误的代码:
<?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;
}
}
}
?>https://stackoverflow.com/questions/11954634
复制相似问题