每个人都遇到语法错误。即使是经验丰富的程序员也会打错字。对于新手来说,这只是学习过程的一部分。但是,通常很容易解释以下错误消息:
PHP解析错误:语法错误,第20行的index.php中出现意外的’{‘
意外的符号并不总是真正的罪魁祸首。但是行号给出了从哪里开始寻找的粗略想法。
始终查看代码上下文。语法错误往往隐藏在提及或在前面的代码行。将代码与手册中的语法示例进行比较。
语法错误是什么?
PHP属于C风格和命令式编程语言。它具有严格的语法规则,遇到错位的符号或标识符时无法恢复。它无法猜测您的编码意图。
函数定义语法摘要
最重要的提示
您可以始终采取一些基本的预防措施:
使用适当的代码缩进,或采用任何高级编码样式。可读性可防止出现不正常情况。
将IDE或编辑器用于PHP并突出显示语法。这也有助于括号/括号平衡。
预期:分号
如何解释解析器错误
典型的语法错误消息为:
解析错误:语法错误,意想不到的T_STRING,期待“ ;
”在file.php上线 217
其中列出了语法错误的可能位置。请参阅提到的文件名和行号。
诸如此类的绰号T_STRING
解释了解析器/令牌最终无法处理的符号。但是,这不一定是语法错误的原因。
同样重要的是要研究以前的代码行。通常,语法错误只是更早发生的不幸。错误行号正是解析器最终放弃处理所有错误的地方。
解决语法错误
有许多方法可以缩小和修复语法问题。
打开提到的源文件。看上面提到的代码行。
对于失控的字符串和放错位置的运算符,通常会在这里找到罪魁祸首。
从左到右阅读该行,并想象每个符号的作用。
更经常地,您还需要查看前几行。
特别是,缺少的;分号在前一行的末尾/语句中丢失。(至少从样式角度而言。)
如果错误地关闭或嵌套了{代码块,}则可能需要进一步研究源代码。使用适当的代码缩进可以简化该过程。
看看语法着色!
字符串,变量和常量都应具有不同的颜色。
运营商也+-*/.
应设置不同的颜色。否则,它们可能处于错误的环境中。
如果看到字符串着色延伸得太远或太短,则说明未变色或缺少结束符”或’字符串标记。
彼此相邻的两个同色标点字符也可能带来麻烦。通常,如果运算符不是,或运算符后的括号++,那么运算符将是孤独的–。在大多数情况下,紧随其后的两个字符串/标识符是错误的。
Whitespace是您的朋友。遵循任何编码风格。
暂时中断长行。
您可以在运算符之间或常量和字符串之间自由添加换行符。然后,解析器将具体化行号以解析错误。您可以查看丢失或放错位置的语法符号,而不必查看冗长的代码。
将复杂的if语句拆分为不同的if条件或嵌套条件。
代替冗长的数学公式或逻辑链,请使用临时变量来简化代码。(更具可读性=更少的错误。)
在以下之间添加换行符:
注释掉违规代码。
如果您无法找出问题根源,请开始注释掉(并因此暂时删除)代码块。
摆脱分析错误后,您便找到了问题根源。仔细看那里。
有时您想暂时删除完整的功能/方法块。(如果大括号不匹配且代码缩进错误。)
如果无法解决语法问题,请尝试从头开始重写注释掉的部分。
作为新手,请避免使用一些令人困惑的语法构造。
三元? :条件运算符可以压缩代码并且确实有用。但这并不能在所有情况下都有助于可读性。if尽量不要使用简单的陈述。
PHP的替代语法(if:/ elseif:/ endif;)在模板中很常见,但是可以说比普通{代码}块更难遵循。
最普遍的新人错误是:
缺少;用于终止语句/行的分号。
“或的字符串引号不匹配,’以及其中的未转义的引号。
被遗忘的运算符,特别是对于字符串.连接。
(括号不平衡)。在报告的行中计数它们。它们是否相等?
不要忘记解决一个语法问题可以发现下一个语法问题。
如果您解决了一个问题,但在下面的一些代码中发现了其他问题,那么您通常走在正确的道路上。
如果在编辑新语法错误后又出现在同一行中,则您尝试的更改可能是失败的。(尽管并非总是如此。)
如果无法修复,请还原以前工作的代码的备份。
不可见的杂散Unicode字符:在某些情况下,您需要在源文件上使用十六进制编辑器或其他编辑器/查看器。仅查看代码无法发现某些问题。
尝试grep –color -P -n “[\x80-\xFF]” file.php查找非ASCII符号的第一种方法。
特别是BOM,零宽度空格或不间断空格,以及智能引号经常可以在源代码中找到。
请注意将哪种换行符保存在文件中。
PHP只接受\n换行符,而不接受\r回车符。
当使用单行//或#注释时,通常仅是一个问题。/…/当换行符被忽略时,多行注释很少会干扰解析器。
如果您的语法错误未通过网络传输:您的计算机上发生语法错误。但是,将相同的文件在线发布不再显示。这仅意味着两件事之一:
您正在查看错误的文件!
或者您的代码包含不可见的杂散Unicode(请参见上文)。您可以轻松地找到:只需将代码从Web表单复制回文本编辑器即可。
检查您的PHP版本。并非所有语法构造在每台服务器上都可用。
php -v
用于命令行解释器
<?php phpinfo()
; 用于通过Web服务器调用的服务器。
这些不一定相同。特别是在使用框架时,您将使它们匹配。
不要将PHP的保留关键字用作函数/方法,类或常量的标识符。
试错是您的最后选择。
如果其他所有方法均失败,则您始终可以搜索错误消息。语法符号不是那么容易搜索(堆栈溢出本身由SymbolHound索引)。因此,在找到相关内容之前,可能需要翻阅几页。
这是我正在开发的wordpress插件的代码。 我是插件开发新手,不知道为什么会出现这样的错误:
我正在使用Flash和PHP创建一个JPG。我让Flash和PHP在本地主机服务器上按预期工作。当我上传到服务器时,出现以下错误: 分析错误:语法错误,在/home/carlosrg/public\u html/mysubdomain/image中出现意外的“:”。php在线6 以及守则: 提前感谢您的时间。
问题内容: 调试代码时出现此错误: PHP解析错误:语法错误,第72行的order.php中出现意外的T_OBJECT_OPERATOR 这是代码段(从第72行开始): 问题答案: 不幸的是,不可能在刚用PHP 5.4之前创建的对象上调用方法。 在PHP 5.4和更高版本中,可以使用以下内容: 注意必填的括号对。 在以前的版本中,必须在变量上调用方法:
下面是代码的一个片段(从第72行开始):
本文向大家介绍详解java.lang.NumberFormatException错误及解决办法,包括了详解java.lang.NumberFormatException错误及解决办法的使用技巧和注意事项,需要的朋友参考一下 前言: 在做后台时用的jsp开发,在页面向controller传参时用String接收的参数,但是数据库实体中jies接收该参数时是int类型,做了一下强制转换,但是没有判断去
问题内容: 我在使用Node.js并将文件上传到服务器时遇到问题。为了将文件上传到服务器,我使用了这个插件。开始将文件上传到服务器时,Node.js进程崩溃并显示错误: 错误:ENOSPC。 服务器代码未运行。 问题答案: 运行以下命令以避免使用ENOSPC: 对于Arch Linux,将此行添加到: 然后执行: 这也将在重新启动后持续存在。 技术细节来源