0

我对出了什么问题感到完全困惑。我有一个成功运行的代码版本,在对我的 endforeach 和 endif 语句的末尾添加 ; 进行了微小的更改(以使其与 php 5.2 兼容)之后,我得到了大量的错误。虽然它们都是相同的错误:

09-Jul-2015 07:47:26 US/Pacific] PHP Notice:  Undefined index:  in /Applications/MAMP/bin/php/php5.6.2/lib/php/PHP/CodeSniffer/File.php on line 3476
[09-Jul-2015 07:47:26 US/Pacific] PHP Stack trace:
[09-Jul-2015 07:47:26 US/Pacific] PHP   1. {main}() /Applications/MAMP/bin/php/php5.6.2/bin/phpcs:0
[09-Jul-2015 07:47:26 US/Pacific] PHP   2. PHP_CodeSniffer_CLI->runphpcs() /Applications/MAMP/bin/php/php5.6.2/bin/phpcs:25
[09-Jul-2015 07:47:26 US/Pacific] PHP   3. PHP_CodeSniffer_CLI->process() /Applications/MAMP/bin/php/php5.6.2/lib/php/PHP/CodeSniffer/CLI.php:95
[09-Jul-2015 07:47:26 US/Pacific] PHP   4. PHP_CodeSniffer->processFiles() /Applications/MAMP/bin/php/php5.6.2/lib/php/PHP/CodeSniffer/CLI.php:867
[09-Jul-2015 07:47:26 US/Pacific] PHP   5. PHP_CodeSniffer->processFile() /Applications/MAMP/bin/php/php5.6.2/lib/php/PHP/CodeSniffer.php:619
[09-Jul-2015 07:47:26 US/Pacific] PHP   6. PHP_CodeSniffer->_processFile() /Applications/MAMP/bin/php/php5.6.2/lib/php/PHP/CodeSniffer.php:1679
[09-Jul-2015 07:47:26 US/Pacific] PHP   7. PHP_CodeSniffer_File->start() /Applications/MAMP/bin/php/php5.6.2/lib/php/PHP/CodeSniffer.php:1801
[09-Jul-2015 07:47:26 US/Pacific] PHP   8. Generic_Sniffs_WhiteSpace_ScopeIndentSniff->process() /Applications/MAMP/bin/php/php5.6.2/lib/php/PHP/CodeSniffer/File.php:567

每次我运行代码时,它都会给我这个错误大约 200 次。我正在使用安装了 phpcs 的 Sublime Text 3。我尝试卸载 phpcs 并将其从我的 php 文件夹中删除,但它似乎根本不影响它。

有人对此有经验吗?知道可能是什么原因造成的吗?

编辑

我已经从 Sublime Text 3 中删除了代码嗅探器包,并删除了错误消息中提到的 CodeSniffer 文件夹,但我仍然收到完全相同的错误消息。

4

2 回答 2

2

您显然遇到了 phpCS 中的错误,因此可能应该在他们的 github 问题页面上报告。请参阅https://github.com/squizlabs/PHP_CodeSniffer/issues。您需要提供尽可能少的代码示例,以便可靠地重现问题。

当然,这个错误只是一个“通知”,所以 PHP 在它发生后很高兴地继续运行 phpCS 程序。这可能是也可能不是一件好事。发生此类问题的某些情况下可能会导致程序进一步出现严重问题,而在其他情况下则根本没有区别。如果不对 phpCS 代码库进行一些深入分析(不幸的是,我没有时间分析),我很难确定这个特定案例属于哪一边。

然而,简单地看一下 File.php 的代码,错误似乎发生在findFirstOnLine()函数中,并且可能是由于它的参数之一 ( $start) 被传递为空白,它期望接收一个整数。

在没有看到我自己发生的问题的情况下,很难确定这一点,但如果这是问题所在,那么快速解决方法是在该函数的开头添加一行,说明类似

$start = (int)$start;

如果我的粗略分析是正确的,那应该会阻止通知的发生。

然而,参数以意外值传入的事实可能指向 phpCS 中其他地方的更深层次的错误,因此我建议在继续上述操作之前需要进行更多分析。

但最后,我会重申我之前发表的评论。发生这种情况是因为您的代码与 PHP5.2 兼容。我真的强烈建议你重新考虑你是否真的需要这样做。今天任何人都应该使用 PHP5.2 的原因是零:它已经失去支持并且近五年没有安全补丁。如果你正在运行它,那么它可能意味着你也在运行一个不受支持的操作系统版本,因为它根本不适用于任何最新的操作系统版本,这意味着你有一大堆安全问题。请不要使用它,也请不要鼓励其他人使用它。

于 2015-07-09T15:22:13.953 回答
0

Undefined index:通常意味着您试图通过其键(其“索引”)访问数组元素,并且数组中的键不存在。

$array = array(
  'a' => 'apple',
  'c' => 'cat',
);
var_dump($array['c']); //cat
var_dump($array['b']); //null
// and notice: Undefined index: b in ...

您的代码的有趣之处在于它没有告诉您索引是什么。

于 2015-07-09T15:00:36.513 回答