首页 > 后端开发 > php教程 > PHP 语法错误:如何排除和解决它们?

PHP 语法错误:如何排除和解决它们?

DDD
发布: 2024-12-26 00:58:10
原创
588 人浏览过

PHP Syntax Errors: How to Troubleshoot and Resolve Them?

PHP语法错误:如何解决?

语法错误是什么?

PHP属于C风格的命令式编程语言。它有严格的语法规则,当遇到错误的位置的符号或标识符时,它无法恢复。它无法猜测你的编程意图。

最重要的提示

有一些基本预防措施你总是可以采取的:

  • 使用正确的代码缩进,或采用任何良好的编码风格。可读性有助于防止异常。
  • 使用具有语法高亮的PHPIDE或编辑器。它还有助于括号/方括号平衡。
  • 仔细阅读手册中的语言参考和示例。两次阅读,以便在一定程度上精通。

如何解释解析器错误

一条典型的语法错误消息如下:

解析错误:语法错误,在 file.php 第 217 行,意外的 T_STRING,需要';'

它列出了语法错误的可能位置。参见提到的文件名行号

T_STRING这样的标题解释了解析器/标记器最终无法处理哪个符号。然而,这不一定是语法错误的原因。

重要的是也要查看前面的代码行。通常,语法错误只是早先发生的小差错。错误行号只是解析器最终放弃处理所有错误的地方。

解决语法错误

有许多方法可以缩小并修复语法问题。

  • 打开提到的源文件。查看提到的代码行

    • 对于失控的字符串和错位的运算符,你通常可以在那里找到罪魁祸首。
    • 自左向右阅读该行,并想象每个符号的作用。
  • 更常见的是,你需要查看前面的行

    • 尤其是,缺少分号;分号在前面的行末尾/语句中丢失。(至少从风格的角度来看)
    • 如果代码块{ }没有正确关闭或嵌套,你可能需要进一步研究源代码。为此,使用适当的代码缩进
  • 查看语法着色

    • 字符串、变量和常量都应该有不同的颜色。
    • 运算符 -*/. 也应该着不同的色,否则它们可能在错误的上下文中。
    • 如果你看到字符串着色延伸得太远或太短,那么你发现了一个未转义或丢失的闭合 " 或 ' 字符串标记。
    • 如果看到两个相同颜色的标点符号彼此相邻,也可能意味着有麻烦。通常,如果它不是 ,-- 或跟随运算符的括号,运算符是单独的。大多数情况下,两个字符串/标识符直接相邻是不正确的。
  • 空格是你的朋友。遵循任何一种编码风格。
  • 暂时拆分长行。

    • 你可以在运算符或常量和字符串之间自由添加换行符。然后解析器会将行号具体化以进行解析错误。而不是查看非常长的代码,你可以隔离丢失或错位的语法符号。
    • 将复杂的if语句拆分成不同的或嵌套的if条件。
    • 对于冗长的数学公式或逻辑链,使用临时变量来简化代码。(可读性越好=错误越少)
    • 在以下内容之间添加换行符:

      • 你可以轻松识别为正确的代码,
      • 你不确定的部分,
      • 和解析器抱怨的行。

    分割长代码块确实有助于找到语法错误的根源。

  • 注释掉有问题的代码。

    • 如果你无法确定问题来源,请开始注释掉(即暂时删除)代码块。
    • 只要你解决了解析错误,你就会找到问题的根源。仔细查看那里。
    • 有时,你希望暂时删除完整的函数/方法块。(在情况下花括号不匹配和代码缩进错误)
    • 如果你无法解决语法问题,请尝试从头开始重写注释掉的节。
  • 作为新手,避免一些令人困惑的语法结构。

    • 三元?:条件运算符可以缩小代码,并且确实有用。但并非在所有情况下都有助于可读性。未精通时,尽量坚持普通的if语句。
    • PHP的备用语法(if:/elseif:/endif;)通常用于模板,但可以说不如 { code } 块容易遵循。
  • 最常见的初学者错误是:

    • 缺少语句/行终止符分号;
    • " 或 ' 的字符串引号不匹配,并且其中未转义引号
    • 忘记运算符,特别是用于字符串 . 连接的运算符
    • 括号不平衡 ( )。在报告的行中计算它们。它们的数量相等吗?
  • 不要忘记解决一个语法问题可能会发现下一个。

    • 如果你让一个问题消失,但其他问题在下面的代码中出现,你大多走在正确的道路上。
    • 如果在编辑后在同一行中出现新的语法错误,那么你的尝试更改还有可能失败。(但并非总是如此)
  • 如果你无法修复它,请恢复先前工作代码的备份。

    • 采用源码版本控制系统。你总是可以看到损坏和上一个工作版本的差异。这可能会说明语法问题是什么。
  • 无形的杂散 Unicode 字符:在某些情况下,你需要对源码使用十六进制编辑器或不同的编辑器/查看器。有些问题无法通过查看代码发现。

    • 尝试 grep --color -P -n "[x80-xFF]" file.php 作为查找非 ASCII 符号的第一步措施。
    • 特别是 BOM、零宽空格、或无间断空格和智能引号经常可以进入源码。-
  • 注意文件中保存的换行符类型

    • PHP只支持 n 换行符,不支持 r 回车符。
    • 这偶尔只对 MacOS 用户来说是一个问题(甚至在用于错误配置编辑器的操作系统 X 上也是如此)。
    • 当使用单行 // 或 # 注释时,它通常只会在忽略换行符时才会出现问题。当忽略换行符时,多行 /.../ 注释很少会干扰解析器。
  • 如果你的语法错误不会通过网络传输:你的机器上有语法错误。但在线发布完全相同的文件不会再出现这种情况。这只能意味着以下两件事之一:

    • 你在看错误的文件!
    • 或者你的代码中包含不可见的杂散 Unicode(见上文)。你可以轻松找出:只需将代码从网络表单复制回文本编辑器中即可。
  • 检查你的PHP版本。并非所有语法结构都可以在每台服务器上都可用。

    • 命令行解释器的 php -v
    • 通过web服务器调用的

    那些不一定相同。特别是使用框架时,你需要使它们匹配。

  • 不要使用 PHP 的保留关键字作为函数/方法、类或常量的标识符。
  • 试验是你的最后手段。

如果其他所有方法都失败,你总是可以在网上搜索你的错误消息。语法符号并不容易搜索(Stack Overflow 本身 由 SymbolHound 索引)。因此可能需要浏览几页才能找到相关信息。

延伸阅读

  • David Sklar 的《PHP 调试基础》
  • Jason McCreary 的《修复 PHP 错误》
  • Mario Lurig 的《PHP 错误——10个常见错误》
  • 《常见的 PHP 错误和解决方案》
  • 《如何排除 WordPress 网站的故障并修复》
  • 《面向设计师的 PHP 错误消息指南》 - Smashing Magazine

白色死屏

如果你的网站只是空白,那么通常的错误是语法错误。使用以下方法启用它们的显示:

  • error_reporting = E_ALL
  • display_errors = 1

通常在你的 php.ini 中,或者对于 mod_php 通过 .htaccess,甚至对于 FastCGI 设置通过 .user.ini。

在损坏的脚本中启用它为时已晚,因为 PHP 甚至无法解释/运行第一行。一个快速的解决方法是制作一个包装脚本,比如 test.php:

然后通过访问这个包装脚本来调用错误的代码。

启用 PHP 的 error_log 并在脚本崩溃时查看 web 服务器的 error.log 也很有帮助,并收到 HTTP 500 响应。

以上是PHP 语法错误:如何排除和解决它们?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板