PHP解析/语法错误;以及如何解决它们

每个人都遇到语法错误。即使是经验丰富的程序员也会打错字。对于新手来说,这只是学习过程的一部分。但是,通常很容易解释以下错误消息:

PHP解析错误:语法错误,第20行的index.php中出现意外的’{‘

意外的符号并不总是真正的罪魁祸首。但是行号给出了从哪里开始寻找的粗略想法。

始终查看代码上下文。语法错误往往隐藏在提及或在前面的代码行。将代码与手册中的语法示例进行比较。

回答:

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

函数定义语法摘要

您可以始终采取一些基本的预防措施:

  • 使用适当的代码缩进,或采用任何高级编码样式。可读性可防止出现不正常情况。

  • 将IDE或编辑器用于PHP并突出显示语法。这也有助于括号/括号平衡。

预期:分号

  • 阅读手册中的语言参考和示例。两次,变得有些熟练。

典型的语法错误消息为:

解析错误:语法错误,意想不到的T_STRING,期待“ ;”在file.php上线 217

其中列出了语法错误的可能位置。请参阅提到的文件名和行号。

诸如此类的绰号T_STRING解释了解析器/令牌最终无法处理的符号。但是,这不一定是语法错误的原因。

同样重要的是要研究以前的代码行。通常,语法错误只是更早发生的不幸。错误行号正是解析器最终放弃处理所有错误的地方。

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

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

  • 对于失控的字符串和放错位置的运算符,通常会在这里找到罪魁祸首。

  • 从左到右阅读该行,并想象每个符号的作用。

  • 更经常地,您还需要查看前几行。

  • 特别是,缺少的;分号在前一行的末尾/语句中丢失。(至少从样式角度而言。)

  • 如果错误地关闭或嵌套了{代码块,}则可能需要进一步研究源代码。使用适当的代码缩进可以简化该过程。

  • 看看语法着色!

  • 字符串,变量和常量都应具有不同的颜色。

  • 运营商也+-*/.应设置不同的颜色。否则,它们可能处于错误的环境中。

  • 如果看到字符串着色延伸得太远或太短,则说明未变色或缺少结束符”或’字符串标记。

  • 彼此相邻的两个同色标点字符也可能带来麻烦。通常,如果运算符不是,或运算符后的括号++,那么运算符将是孤独的–。在大多数情况下,紧随其后的两个字符串/标识符是错误的。

  • Whitespace是您的朋友。遵循任何编码风格。

  • 暂时中断长行。

  • 您可以在运算符之间或常量和字符串之间自由添加换行符。然后,解析器将具体化行号以解析错误。您可以查看丢失或放错位置的语法符号,而不必查看冗长的代码。

  • 将复杂的if语句拆分为不同的if条件或嵌套条件。

  • 代替冗长的数学公式或逻辑链,请使用临时变量来简化代码。(更具可读性=更少的错误。)

  • 在以下之间添加换行符:

    1. 您可以轻松识别出正确的代码,
    2. 您不确定的部分
    3. 以及解析器抱怨的行。

      对长代码块进行分区确实有助于找到语法错​​误的来源。

  • 注释掉违规代码。

  • 如果您无法找出问题根源,请开始注释掉(并因此暂时删除)代码块。

  • 摆脱分析错误后,您便找到了问题根源。仔细看那里。

  • 有时您想暂时删除完整的功能/方法块。(如果大括号不匹配且代码缩进错误。)

  • 如果无法解决语法问题,请尝试从头开始重写注释掉的部分。

  • 作为新手,请避免使用一些令人困惑的语法构造。

  • 三元? :条件运算符可以压缩代码并且确实有用。但这并不能在所有情况下都有助于可读性。if尽量不要使用简单的陈述。

  • PHP的替代语法(if:/ elseif:/ endif;)在模板中很常见,但是可以说比普通{代码}块更难遵循。

  • 最普遍的新人错误是:

  • 缺少;用于终止语句/行的分号。

  • “或的字符串引号不匹配,’以及其中的未转义的引号。

  • 被遗忘的运算符,特别是对于字符串.连接。

  • (括号不平衡)。在报告的行中计数它们。它们是否相等?

  • 不要忘记解决一个语法问题可以发现下一个语法问题。

  • 如果您解决了一个问题,但在下面的一些代码中发现了其他问题,那么您通常走在正确的道路上。

  • 如果在编辑新语法错误后又出现在同一行中,则您尝试的更改可能是失败的。(尽管并非总是如此。)

如果无法修复,请还原以前工作的代码的备份。

  • 采用源代码版本控制系统。您始终可以查看diff损坏的最后工作版本的。关于语法问题,这可能会有所启发。
  • 不可见的杂散Unicode字符:在某些情况下,您需要在源文件上使用十六进制编辑器或其他编辑器/查看器。仅查看代码无法发现某些问题。

  • 尝试grep –color -P -n “[\x80-\xFF]” file.php查找非ASCII符号的第一种方法。

  • 特别是BOM,零宽度空格或不间断空格,以及智能引号经常可以在源代码中找到。

  • 请注意将哪种换行符保存在文件中。

  • PHP只接受\n换行符,而不接受\r回车符。

  • 对于MacOS用户,这有时是个问题(即使在OS X上,对于配置错误的编辑器)。

  • 当使用单行//或#注释时,通常仅是一个问题。//当换行符被忽略时,多行注释很少会干扰解析器。

  • 如果您的语法错误未通过网络传输:您的计算机上发生语法错误。但是,将相同的文件在线发布不再显示。这仅意味着两件事之一:

  • 您正在查看错误的文件!

  • 或者您的代码包含不可见的杂散Unicode(请参见上文)。您可以轻松地找到:只需将代码从Web表单复制回文本编辑器即可。

  • 检查您的PHP版本。并非所有语法构造在每台服务器上都可用。

  • php -v 用于命令行解释器

  • <?php phpinfo(); 用于通过Web服务器调用的服务器。

这些不一定相同。特别是在使用框架时,您将使它们匹配。

  • 不要将PHP的保留关键字用作函数/方法,类或常量的标识符。

  • 试错是您的最后选择。

如果其他所有方法均失败,则您始终可以搜索错误消息。语法符号不是那么容易搜索(堆栈溢出本身由SymbolHound索引)。因此,在找到相关内容之前,可能需要翻阅几页。

以上是 PHP解析/语法错误;以及如何解决它们 的全部内容, 来源链接: utcz.com/qa/432511.html

回到顶部