每个人都遇到语法错误。即使是经验丰富的程序员也会打错字。对于新手来说,这只是学习过程的一部分。但是,通常很容易解释以下错误消息:
意外的符号并不总是真正的罪魁祸首。但是行号给出了从哪里开始寻找的粗略想法。
虽然并非每种情况都匹配。但是还有一些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编程语言。它具有严格的语法规则,遇到错位的符号或标识符时无法恢复。它无法猜测您的编码意图。
最重要的提示
您可以始终采取一些基本的预防措施:
可读性可防止出现不合规定的情况。
这也有助于括号/括号平衡。
两次,变得有些熟练。
如何解释解析器错误
典型的语法错误消息如下:
其中列出了语法错误的可能位置。请参阅提到的文件名和行号。
诸如
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/63551175/