Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找PHP解析错误_Php - Fatal编程技术网

查找PHP解析错误

查找PHP解析错误,php,Php,在编写PHP代码时,如果不记得以前编辑过哪些部分,可能会导致很难跟踪解析错误。我很想听听有没有什么有见地的方法来找出你可能发现的这些错误 示例:意外的“;”,在第877行的someclass.php中需要T_函数 这个模糊的错误指出你有意外;在一个包含877行PHP代码的类中,错误肯定不在最后一行。错误消息是否具有误导性?除了从顶部开始,并在扫描每一行代码时试图找到令人不快的地方之外,您从何处开始查找,以及如何开始查找。如果您使用的是一些控制版本系统,您可以查找文件/类的实际版本和旧版本之间的差

在编写PHP代码时,如果不记得以前编辑过哪些部分,可能会导致很难跟踪解析错误。我很想听听有没有什么有见地的方法来找出你可能发现的这些错误

示例:意外的“;”,在第877行的someclass.php中需要T_函数


这个模糊的错误指出你有意外;在一个包含877行PHP代码的类中,错误肯定不在最后一行。错误消息是否具有误导性?除了从顶部开始,并在扫描每一行代码时试图找到令人不快的地方之外,您从何处开始查找,以及如何开始查找。

如果您使用的是一些控制版本系统,您可以查找文件/类的实际版本和旧版本之间的差异。

首先,我会使用一个动态突出PHP错误的编辑器,例如,当您键入代码时(它非常强大、积极维护、免费,并且是OSS),它将帮助您几乎立即检测到一些错误,而无需执行代码

如果您将它与Subversion插件一起使用(在Eclipse中集成SVN访问),它还可以显示它所称的“快速差异”:突出显示未提交给SVN的修改行的边距——这有助于检测自上次提交以来所做的更改


不过,请注意,由于它基于Eclipse,需要一台功能相当强大的计算机(我想说,需要一台具有2GB RAM的双核,如果您同时还想使用其他软件,1GB通常是不够的^^)



然后,当您使用PHP编程一段时间后,您可能会更快/更好地理解这些消息,并知道在哪里查找;-)

在编写代码时尽可能频繁地运行代码。每次执行之间添加的代码行越少,新错误的搜索空间就越小


如果自上次加载页面以来,我只编辑了877行文件中的5行,则查找错误的速度可能比编辑100行要快得多。

此类错误通常由“{”if、switch、while、do、function、class等未关闭。

无论使用何种编辑器,也可以进行频繁的语法检查:

php -l file.php php-l file.php 请注意,我使用了单词“frequency”。如果您使用vim,您可能会在.vimrc文件中发现以下有用信息:

map <F12> <ESC>:!php -l %<CR> 地图:!php-l%
只要随时点击F12,就可以动态检查语法。

我发现PHP报告语法错误的功能相当不错,但由于语法错误几乎可以是任何东西,所以很明显对可能的功能有限制。一般来说,您的错误可能接近报告的行。例如,在本例中,我假设您已经完成了比如:

class Foo {
  function blah() {
  };
}
或许:

class Foo {
  protected $foo;;
}

分号在这两种情况下都是非法的。

Zend Studio有一个很棒的调试工具,允许您选择各种选项,包括设置断点、单步执行代码和检查变量/参数。当然,所有这些都是有代价的=(

当一个文件中有877行代码时,您真的应该重构代码:)使用较小的文件也可以更容易地跟踪此类错误。当然,有多种方法可以从一开始就减少出现这些问题的可能性,这是一种最坏的情况。:)