每个人都会遇到语法错误。即使是有经验的程序员也会犯错。对于新手来说,这只是学习过程的一部分。但是,通常很容易解释错误消息,例如:
PHP Parse error: syntax error, unexpected '{' in index.php on line 20
意想不到的符号并不总是真正的罪魁祸首。但是行号给出了从哪里开始寻找的粗略想法。
Always look at the code context. The syntax mistake often hides in the mentioned or in previous code lines. Compare your code against syntax examples from the manual.
虽然并非所有情况都与其他情况相匹配。然而还有一些general steps to solve syntax mistakes .
这些引用文献总结了常见的陷阱:
Unexpected '$varname' (T_VARIABLE)
Unexpected T_ENCAPSED_AND_WHITESPACE
{
Unexpected
}
Unexpected
(
Unexpected
)
[
Unexpected
]
Unexpected T_FOREACH
Unexpected T_FOR
Unexpected T_WHILE
Unexpected T_DO
Unexpected T_PRINT
Unexpected T_ECHO
Unexpected continue (T_BREAK)
Unexpected continue (T_RETURN)
Unexpected T_BOOLEAN_AND …
Unexpected T_IS_GREATER_OR_EQUAL
Unexpected T_IS_IDENTICAL
Unexpected T_IS_NOT_EQUAL
Unexpected T_IS_NOT_IDENTICAL
Unexpected T_IS_SMALLER_OR_EQUAL
Unexpected
<
Unexpected
>
\
' (ASCII=92) state=1Unexpected 'private' (T_PRIVATE)
Unexpected 'protected' (T_PROTECTED)
Unexpected 'final' (T_FINAL) …
,
(逗号).
(时期);
(分号)*
(星号):
(冒号)&
(调用时传递引用).
密切相关的引用资料:
“”
smart ‘’
quotes mean nothing to PHP 和:
虽然 Stack Overflow 也欢迎新手程序员,但它主要针对专业编程问题。
如果您的浏览器显示诸如“语法错误:非法字符”之类的错误消息,那么它实际上不是 php -相关,但 javascript - syntax error .
供应商代码引发的语法错误:最后,如果语法错误不是通过编辑代码库引发的,而是在外部供应商软件包安装或升级后引发的,则可能是由于 PHP 版本不兼容,因此请根据您的平台设置检查供应商的要求。
最佳答案
什么是语法错误?
PHP 属于 C-style和 imperative编程语言。它有严格的语法规则,遇到错位的符号或标识符时无法恢复。它无法猜测您的编码意图。
最重要的提示
您可以随时采取一些基本的预防措施:
可读性可防止出现违规行为。
这也有助于括号/括号平衡。
两次,变得有些精通。
如何解释解析器错误
典型的语法错误消息如下:
Parse error: syntax error, unexpected T_STRING, expecting '
;
' in file.php on line 217
其中列出了语法错误的可能位置。见上述文件名 和 行号 .
moniker如
T_STRING
解释解析器/分词器最终无法处理的符号。然而,这不一定是语法错误的原因。查看 很重要以前的代码行 以及。通常语法错误只是之前发生的不幸。错误行号正是解析器最终放弃处理它的地方。
解决语法错误
有很多方法可以缩小和修复语法问题。
;
前一行结尾/语句中缺少分号。 (至少从文体的角度来看。){
代码块}
错误地关闭或嵌套,您可能需要进一步调查源代码。使用适当的代码缩进来简化它。 +-*/.
也应该着色不同。否则他们可能处于错误的上下文中。 "
或 '
字符串标记。 ++
,运营商是孤独的, --
, 或运算符后面的括号。在大多数情况下,紧随其后的两个字符串/标识符是不正确的。 遵循任何编码风格。
if
语句变成不同的或嵌套的 if
状况。 对长代码块进行分区确实有助于定位语法错误的来源。
? :
条件运算符可以压缩代码并且确实很有用。但它并不在所有情况下都有助于可读性。喜欢素色if
不了解时的陈述。 if:
/elseif:
/endif;
)在模板中很常见,但可以说比普通 {
更容易遵循代码 }
块。 ;
用于终止语句/行。 "
的字符串引号不匹配或 '
和未转义的引号内。 .
级联。 (
括号)
.在报告的行中计算它们。它们的数量是否相等? diff
损坏的和最后一个工作版本。这可能对语法问题有启发意义。grep --color -P -n "\[\x80-\xFF\]" file.php
作为查找非 ASCII 符号的第一个措施。 //
时才作为问题出现。或 #
评论被使用。多线 /*...*/
当换行符被忽略时,注释很少会干扰解析器。 碰巧您的机器上有语法错误。但是在线发布完全相同的文件不再显示它。这只能意味着两件事之一:
您可以轻松找到:只需将您的代码从 Web 表单复制回文本编辑器即可。
php -v
用于命令行解释器 <?php phpinfo();
对于通过网络服务器调用的那个。 这些不一定相同。特别是在使用框架时,您会将它们匹配。
如果所有其他方法都失败了,您可以随时 谷歌 你的错误信息。语法符号不是那么容易搜索(尽管堆栈溢出本身是由 SymbolHound 索引的)。因此,您可能需要多浏览几页才能找到相关内容。
更多指南:
白屏死机
如果您的网站只是空白,那么通常是因为语法错误。
启用他们的显示:
error_reporting = E_ALL
display_errors = 1
在您的
php.ini
一般情况下,或通过 .htaccess
对于 mod_php,甚至
.user.ini
使用 FastCGI 设置。在损坏的脚本中启用它为时已晚,因为 PHP 甚至无法解释/运行第一行。一个快速的解决方法是制作一个包装脚本,比如
test.php
:<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
include("./broken-script.php");
然后通过访问此包装器脚本调用失败的代码。
它还有助于启用 PHP 的
error_log
并查看您的 webserver's error.log
当脚本因 HTTP 500 响应而崩溃时。
关于PHP 解析/语法错误;以及如何解决它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18050071/