PHP解析/语法错误;以及如何解决它们
每个人都遇到语法错误。即使是经验丰富的程序员也会打错字。对于新手来说,这只是学习过程的一部分。但是,通常很容易解释以下错误消息:
PHP解析错误:语法错误,第20行的index.php中出现意外的’{‘
意外的符号并不总是真正的罪魁祸首。但是行号给出了从哪里开始寻找的粗略想法。
始终查看代码上下文。语法错误往往隐藏在提及或在前面的代码行。将代码与手册中的语法示例进行比较。
回答:
PHP属于C风格和命令式编程语言。它具有严格的语法规则,遇到错位的符号或标识符时无法恢复。它无法猜测您的编码意图。
函数定义语法摘要
您可以始终采取一些基本的预防措施:
使用适当的代码缩进,或采用任何高级编码样式。可读性可防止出现不正常情况。
将IDE或编辑器用于PHP并突出显示语法。这也有助于括号/括号平衡。
预期:分号
- 阅读手册中的语言参考和示例。两次,变得有些熟练。
典型的语法错误消息为:
解析错误:语法错误,意想不到的T_STRING,期待“ ;
”在file.php上线 217
其中列出了语法错误的可能位置。请参阅提到的文件名和行号。
诸如此类的绰号T_STRING
解释了解析器/令牌最终无法处理的符号。但是,这不一定是语法错误的原因。
同样重要的是要研究以前的代码行。通常,语法错误只是更早发生的不幸。错误行号正是解析器最终放弃处理所有错误的地方。
有许多方法可以缩小和修复语法问题。
打开提到的源文件。看上面提到的代码行。
对于失控的字符串和放错位置的运算符,通常会在这里找到罪魁祸首。
从左到右阅读该行,并想象每个符号的作用。
更经常地,您还需要查看前几行。
特别是,缺少的;分号在前一行的末尾/语句中丢失。(至少从样式角度而言。)
如果错误地关闭或嵌套了{代码块,}则可能需要进一步研究源代码。使用适当的代码缩进可以简化该过程。
看看语法着色!
字符串,变量和常量都应具有不同的颜色。
运营商也
+-*/.
应设置不同的颜色。否则,它们可能处于错误的环境中。如果看到字符串着色延伸得太远或太短,则说明未变色或缺少结束符”或’字符串标记。
彼此相邻的两个同色标点字符也可能带来麻烦。通常,如果运算符不是,或运算符后的括号++,那么运算符将是孤独的–。在大多数情况下,紧随其后的两个字符串/标识符是错误的。
Whitespace是您的朋友。遵循任何编码风格。
暂时中断长行。
您可以在运算符之间或常量和字符串之间自由添加换行符。然后,解析器将具体化行号以解析错误。您可以查看丢失或放错位置的语法符号,而不必查看冗长的代码。
将复杂的if语句拆分为不同的if条件或嵌套条件。
代替冗长的数学公式或逻辑链,请使用临时变量来简化代码。(更具可读性=更少的错误。)
在以下之间添加换行符:
- 您可以轻松识别出正确的代码,
- 您不确定的部分
- 以及解析器抱怨的行。
对长代码块进行分区确实有助于找到语法错误的来源。
注释掉违规代码。
如果您无法找出问题根源,请开始注释掉(并因此暂时删除)代码块。
摆脱分析错误后,您便找到了问题根源。仔细看那里。
有时您想暂时删除完整的功能/方法块。(如果大括号不匹配且代码缩进错误。)
如果无法解决语法问题,请尝试从头开始重写注释掉的部分。
作为新手,请避免使用一些令人困惑的语法构造。
三元? :条件运算符可以压缩代码并且确实有用。但这并不能在所有情况下都有助于可读性。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