每个人都遇到语法错误。即使是经验丰富的程序员也会打错字。对于新手来说,这只是学习过程的一部分。但是,通常很容易解释以下错误消息:
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也欢迎新手程序员,但它主要针对专业编程问题。
如果您的浏览器显示诸如“SyntaxError:非法字符”之类的错误消息,则它实际上不是php相关的,而是javascript-syntax error。
在供应商代码上引发的语法错误:最后,请考虑如果语法错误不是由于编辑代码库而引起的,而是在外部供应商软件包安装或升级之后出现的,则可能是由于PHP版本不兼容所致,因此请对照供应商的要求进行检查。您的平台设置。
最佳答案
语法错误是什么?
PHP属于C-style和imperative编程语言。它具有严格的语法规则,遇到错位的符号或标识符时无法恢复。它无法猜测您的编码意图。
最重要的提示
您可以始终采取一些基本的预防措施:
可读性可防止出现不合规定的情况。
这也有助于括号/括号平衡。
两次,变得有些熟练。
如何解释解析器错误
典型的语法错误消息如下:
Parse error: syntax error, unexpected T_STRING, expecting '
;
' in file.php on line 217
其中列出了语法错误的可能位置。请参阅提到的文件名和行号。
诸如
T_STRING
之类的moniker解释了解析器/ token 最终无法处理的符号。但是,这不一定是语法错误的原因。同样重要的是,还要研究之前的代码行。通常,语法错误只是更早发生的不幸。错误行号正是解析器最终放弃处理所有错误的地方。
解决语法错误
有许多方法可以缩小和修复语法问题。
;
分号在前一行的末尾/语句中丢失了。 (至少从样式 Angular 而言。){
代码块}
被错误地关闭或嵌套,则可能需要进一步研究源代码。使用适当的代码缩进可以简化该过程。 +-*/.
也应设置为不同的颜色。否则,它们可能处于错误的环境中。 "
或'
字符串标记。 ++
,--
或运算符后的括号,则运算符将是孤独的。在大多数情况下,紧随其后的两个字符串/标识符是错误的。 遵循任何编码风格。
if
语句拆分为不同的或嵌套的if
条件。 对长代码块进行分区确实有助于查找语法错误的来源。
? :
条件运算符可以压缩代码,并且确实有用。但这并不能在所有情况下都有助于可读性。最好不要使用普通的if
语句。 if:
/elseif:
/endif;
)在模板中很常见,但可以说比一般的{
代码}
块不那么容易理解。 ;
。 "
或'
的字符串引号不匹配,并且其中的未转义引号。 .
串联而言。 (
括号)
。在报告的行中计数它们。它们是否相等? diff
。关于语法问题,这可能很有启发性。grep --color -P -n "\[\x80-\xFF\]" file.php
作为查找非ASCII符号的第一种方法。 //
或#
注释时,通常仅是一个问题。当换行符被忽略时,多行/*...*/
注释很少会干扰解析器。 碰巧您的计算机上存在语法错误。但是,将相同的文件在线发布不再显示。这仅意味着两件事之一:
您可以轻松地发现:只需将代码从Web表单复制回文本编辑器即可。
命令行解释器
php -v
<?php phpinfo();
用于通过Web服务器调用的代码。 这些不一定相同。特别是在使用框架时,您将使它们匹配。
如果所有其他方法均失败,则您始终可以 google 您的错误消息。语法符号并不是那么容易搜索(堆栈溢出本身由SymbolHound索引)。因此,在找到相关内容之前,可能需要翻阅几页。
其他指南:
死亡白屏
如果您的网站只是空白,则通常是语法错误。
通过以下方式启用其显示:
error_reporting = E_ALL
display_errors = 1
通常,在您的
php.ini
中,或通过 .htaccess
(对于mod_php),甚至是FastCGI设置的
.user.ini
。在损坏的脚本中启用它为时已晚,因为PHP甚至无法解释/运行第一行。一个快速的解决方法是制作包装器脚本,例如
test.php
:<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
include("./broken-script.php");
然后通过访问此包装器脚本来调用失败的代码。
它还有助于启用PHP的
error_log
并在脚本因HTTP 500响应而崩溃时查看webserver's error.log
。
关于php - PHP解析/语法错误;以及如何解决它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63987069/