PHP解析/语法错误;如何解决这些问题

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

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

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

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

虽然并不是每种情况都与另一种情况相匹配,但是有一些一般步骤可以解决语法错误。
本参考文献总结了常见的陷阱:

  • 意外的T_字符串

  • 意外的T_变量
    意外的“$varname”(T_变量)

  • 意外的T_常量\u封装的\u字符串
    意外的T_封装的\u和\u空格

  • 意外的$end

  • 意外的T_函数

  • 意外的{
    意外的}
    意外的
    意外的

  • 意外的[
    意外的]

  • 意外的T\U IF
    意外的T\U FOREACH
    意外的T\U FOR
    意外的T\U而
    意外的T\U DO
    意外的T\U打印
    意外的T\U回显

  • 意外的T_LNUMBER

  • 意料之外

  • 意外继续(T\u continue)
    意外继续(T\u BREAK)
    意外继续(T\u RETURN)

  • 意外的“=”

  • 意外的T\u内联\u HTML

  • 意外的T_PAAMAYIM_NEKUDOTAYIM

  • 意外的T\u对象\u运算符

  • 意外的T_双_箭头

  • 意外的T_SL

  • 意外的T\u布尔值\u或…

    意外的T_布尔_和

  • 意外的T_等于
    意外的T_大于或等于
    意外的T_是相同的
    意外的T_不相等
    意外的T\u不完全相同
    意外的T_小于或等于
    意外的<
    意外的>

  • 意外的T\u n\u分隔符

  • 输入中出现意外字符:“\”(ASCII=92)状态=1

  • 意外的“公共”(T_public)
    意外的“私有”(T_private)
    意外的“受保护”(T_protected)
    意外的“最终”(T_final)

  • 意外的T_静态

  • 意外的T_类

  • 意外的“使用”(T_使用)

  • 意外T_DNUMBER

  • 意外的(逗号)

  • 未执行的(句点)

  • 意外的(分号)

  • 意外的*(星号)

  • 意外的(冒号)

  • 意外的“:”,应为“,”或“,”

  • 意外的&(按参考传递呼叫时间)

  • 意外的

密切相关的参考文献:

  • 这个错误在PHP中意味着什么?(运行时错误)
    • 分析错误:语法错误,意外的T_XXX
    • 分析错误:语法错误、意外的T_封装_和_空白
    • 分析错误:语法错误,意外的T_变量
  • 这个符号在PHP中是什么意思?(语言标记)
  • 那些智能引号对PHP来说毫无意义

以及:

  • PHP.net上的PHP手册及其各种语言标记
  • 或者维基百科关于PHP的语法介绍
  • 最后是我们的php标签wiki

虽然Stack Overflow也欢迎新手程序员,但它主要针对专业编程问题

  • 回答每个人的编码错误和狭隘的打字错误通常被认为是离题的
  • 因此,在发布语法修复请求之前,请花时间遵循基本步骤
  • 如果您仍然必须这样做,请展示您自己的解决方案、尝试的修复,以及您对什么看起来或可能是错误的思考过程

如果您的浏览器显示错误消息,如“SyntaxError:非法字符”,那么它实际上与php无关,而是javascript语法错误


厂商代码中出现的语法错误:最后,考虑如果通过编辑您的代码库而没有引发语法错误,但在外部供应商包安装或升级之后,可能是由于PHP版本不兼容,所以检查供应商对平台设置的要求。

语法错误是什么

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

最重要的提示

您可以随时采取以下几项基本预防措施:

  • 使用适当的代码缩进,或采用任何高尚的编码风格。
    可读性可防止不规则

  • 使用IDE或带有语法突出显示的PHP编辑器。
    这也有助于圆括号/支架的平衡

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

如何解释解析器错误

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

分析错误:语法错误,意外的T_字符串,在行的文件.php中应为

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

诸如T\u STRING之类的名字解释了解析器/标记器最终无法处理的符号。然而,这不一定是语法错误的原因

查看以前的代码行也很重要。语法错误通常只是先前发生的错误。错误行号正是解析器最终放弃处理它的地方

解决语法错误

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

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

    • 对于失控的字符串和放错位置的运算符,这通常是找到罪魁祸首的地方

    • 从左到右阅读这一行,想象每个符号的作用

  • 您还需要更经常地查看前面的几行

    • 特别是,前一行结尾/语句中缺少分号。;(至少从文体角度来看是这样)

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

  • 请看语法着色

    • 字符串、变量和常量都应该有不同的颜色

    • 运算符+-*/.也应着色为不同的。否则,它们可能位于错误的上下文中

    • 如果您看到字符串着色扩展得太远或太短,那么您发现了一个未切换或缺少的结束标记字符串标记

    • 两个相同颜色的标点符号相邻也可能意味着麻烦。通常,如果运算符后面不是++--或括号,则运算符是孤立的。在大多数上下文中,两个直接紧跟在后面的字符串/标识符是不正确的

  • 空白是你的朋友
    遵循任何编码风格。

  • 暂时打散长队

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

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

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

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

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

      对长代码块进行分区实际上有助于找到语法错误的根源

  • 注释掉有问题的代码

    • 如果无法隔离问题源,请开始注释掉(从而临时删除)代码块

    • 一旦您消除了解析错误,您就找到了问题的根源。请仔细查看

    • 有时,您希望临时删除完整的函数/方法块(如果有不匹配的大括号和错误缩进的代码)

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

  • 作为新手,避免一些令人困惑的语法结构

发表评论