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中文网其他相关文章!