每个人都会遇到语法错误。即使是有经验的程序员也会打字。对于新手来说,这只是学习过程的一部分。但是,通常很容易解释错误消息,例如:
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条件 -
使用临时变量来简化代码,而不是冗长的数学公式或逻辑链。(可读性更强=错误更少。)
-
在以下各项之间添加换行符:
- 您可以轻松识别为正确的代码
- 你不确定的部分
- 以及解析器抱怨的行。
对长代码块进行分区实际上有助于找到语法错误的根源
-
-
注释掉有问题的代码
-
如果无法隔离问题源,请开始注释掉(从而临时删除)代码块
-
一旦您消除了解析错误,您就找到了问题的根源。请仔细查看
-
有时,您希望临时删除完整的函数/方法块(如果有不匹配的大括号和错误缩进的代码)
-
如果无法解决语法问题,请尝试从头开始重写注释掉的部分
-
-
作为新手,避免一些令人困惑的语法结构
-
三元
?:条件运算符可以压缩代码,确实很有用。但它并不能在所有情况下都有助于可读性。在不使用条件的情况下,首选纯if语句 -
PHP的替代语法(
if:/elseif:/endif;)是
-