搜索
首页后端开发php教程PHP 语法错误:如何排除和解决它们?

PHP Syntax Errors: How to Troubleshoot and Resolve Them?

PHP语法错误:如何解决?

语法错误是什么?

PHP属于C风格的命令式编程语言。它有严格的语法规则,当遇到错误的位置的符号或标识符时,它无法恢复。它无法猜测你的编程意图。

最重要的提示

有一些基本预防措施你总是可以采取的:

  • 使用正确的代码缩进,或采用任何良好的编码风格。可读性有助于防止异常。
  • 使用具有语法高亮的PHPIDE或编辑器。它还有助于括号/方括号平衡。
  • 仔细阅读手册中的语言参考和示例。两次阅读,以便在一定程度上精通。

如何解释解析器错误

一条典型的语法错误消息如下:

解析错误:语法错误,在 file.php 第 217 行,意外的 T_STRING,需要';'

它列出了语法错误的可能位置。参见提到的文件名行号

T_STRING这样的标题解释了解析器/标记器最终无法处理哪个符号。然而,这不一定是语法错误的原因。

重要的是也要查看前面的代码行。通常,语法错误只是早先发生的小差错。错误行号只是解析器最终放弃处理所有错误的地方。

解决语法错误

有许多方法可以缩小并修复语法问题。

  • 打开提到的源文件。查看提到的代码行

    • 对于失控的字符串和错位的运算符,你通常可以在那里找到罪魁祸首。
    • 自左向右阅读该行,并想象每个符号的作用。
  • 更常见的是,你需要查看前面的行

    • 尤其是,缺少分号;分号在前面的行末尾/语句中丢失。(至少从风格的角度来看)
    • 如果代码块{ }没有正确关闭或嵌套,你可能需要进一步研究源代码。为此,使用适当的代码缩进
  • 查看语法着色

    • 字符串、变量和常量都应该有不同的颜色。
    • 运算符 -*/. 也应该着不同的色,否则它们可能在错误的上下文中。
    • 如果你看到字符串着色延伸得太远或太短,那么你发现了一个未转义或丢失的闭合 " 或 ' 字符串标记。
    • 如果看到两个相同颜色的标点符号彼此相邻,也可能意味着有麻烦。通常,如果它不是 ,-- 或跟随运算符的括号,运算符是单独的。大多数情况下,两个字符串/标识符直接相邻是不正确的。
  • 空格是你的朋友。遵循任何一种编码风格。
  • 暂时拆分长行。

    • 你可以在运算符或常量和字符串之间自由添加换行符。然后解析器会将行号具体化以进行解析错误。而不是查看非常长的代码,你可以隔离丢失或错位的语法符号。
    • 将复杂的if语句拆分成不同的或嵌套的if条件。
    • 对于冗长的数学公式或逻辑链,使用临时变量来简化代码。(可读性越好=错误越少)
    • 在以下内容之间添加换行符:

      • 你可以轻松识别为正确的代码,
      • 你不确定的部分,
      • 和解析器抱怨的行。

    分割长代码块确实有助于找到语法错误的根源。

  • 注释掉有问题的代码。

    • 如果你无法确定问题来源,请开始注释掉(即暂时删除)代码块。
    • 只要你解决了解析错误,你就会找到问题的根源。仔细查看那里。
    • 有时,你希望暂时删除完整的函数/方法块。(在情况下花括号不匹配和代码缩进错误)
    • 如果你无法解决语法问题,请尝试从头开始重写注释掉的节。
  • 作为新手,避免一些令人困惑的语法结构。

    • 三元?:条件运算符可以缩小代码,并且确实有用。但并非在所有情况下都有助于可读性。未精通时,尽量坚持普通的if语句。
    • PHP的备用语法(if:/elseif:/endif;)通常用于模板,但可以说不如 { code } 块容易遵循。
  • 最常见的初学者错误是:

    • 缺少语句/行终止符分号;
    • " 或 ' 的字符串引号不匹配,并且其中未转义引号
    • 忘记运算符,特别是用于字符串 . 连接的运算符
    • 括号不平衡 ( )。在报告的行中计算它们。它们的数量相等吗?
  • 不要忘记解决一个语法问题可能会发现下一个。

    • 如果你让一个问题消失,但其他问题在下面的代码中出现,你大多走在正确的道路上。
    • 如果在编辑后在同一行中出现新的语法错误,那么你的尝试更改还有可能失败。(但并非总是如此)
  • 如果你无法修复它,请恢复先前工作代码的备份。

    • 采用源码版本控制系统。你总是可以看到损坏和上一个工作版本的差异。这可能会说明语法问题是什么。
  • 无形的杂散 Unicode 字符:在某些情况下,你需要对源码使用十六进制编辑器或不同的编辑器/查看器。有些问题无法通过查看代码发现。

    • 尝试 grep --color -P -n "[x80-xFF]" file.php 作为查找非 ASCII 符号的第一步措施。
    • 特别是 BOM、零宽空格、或无间断空格和智能引号经常可以进入源码。-
  • 注意文件中保存的换行符类型

    • PHP只支持 n 换行符,不支持 r 回车符。
    • 这偶尔只对 MacOS 用户来说是一个问题(甚至在用于错误配置编辑器的操作系统 X 上也是如此)。
    • 当使用单行 // 或 # 注释时,它通常只会在忽略换行符时才会出现问题。当忽略换行符时,多行 /.../ 注释很少会干扰解析器。
  • 如果你的语法错误不会通过网络传输:你的机器上有语法错误。但在线发布完全相同的文件不会再出现这种情况。这只能意味着以下两件事之一:

    • 你在看错误的文件!
    • 或者你的代码中包含不可见的杂散 Unicode(见上文)。你可以轻松找出:只需将代码从网络表单复制回文本编辑器中即可。
  • 检查你的PHP版本。并非所有语法结构都可以在每台服务器上都可用。

    • 命令行解释器的 php -v
    • 通过web服务器调用的

    那些不一定相同。特别是使用框架时,你需要使它们匹配。

  • 不要使用 PHP 的保留关键字作为函数/方法、类或常量的标识符。
  • 试验是你的最后手段。

如果其他所有方法都失败,你总是可以在网上搜索你的错误消息。语法符号并不容易搜索(Stack Overflow 本身 由 SymbolHound 索引)。因此可能需要浏览几页才能找到相关信息。

延伸阅读

  • David Sklar 的《PHP 调试基础》
  • Jason McCreary 的《修复 PHP 错误》
  • Mario Lurig 的《PHP 错误——10个常见错误》
  • 《常见的 PHP 错误和解决方案》
  • 《如何排除 WordPress 网站的故障并修复》
  • 《面向设计师的 PHP 错误消息指南》 - Smashing Magazine

白色死屏

如果你的网站只是空白,那么通常的错误是语法错误。使用以下方法启用它们的显示:

  • error_reporting = E_ALL
  • display_errors = 1

通常在你的 php.ini 中,或者对于 mod_php 通过 .htaccess,甚至对于 FastCGI 设置通过 .user.ini。

在损坏的脚本中启用它为时已晚,因为 PHP 甚至无法解释/运行第一行。一个快速的解决方法是制作一个包装脚本,比如 test.php:

<?php error_reporting(E_ALL);
   ini_set("display_errors", 1);
   include("./broken-script.php");
?>

然后通过访问这个包装脚本来调用错误的代码。

启用 PHP 的 error_log 并在脚本崩溃时查看 web 服务器的 error.log 也很有帮助,并收到 HTTP 500 响应。

以上是PHP 语法错误:如何排除和解决它们?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
高流量网站的PHP性能调整高流量网站的PHP性能调整May 14, 2025 am 12:13 AM

TheSecretTokeEpingAphp-PowerEdwebSiterUnningSmoothlyShyunderHeavyLoadInVolvOLVOLVOLDEVERSALKEYSTRATICES:1)emplactopCodeCachingWithOpcachingWithOpCacheToreCescriptexecution Time,2)使用atabasequercachingCachingCachingWithRedataBasEndataBaseLeSendataBaseLoad,3)

PHP中的依赖注入:初学者的代码示例PHP中的依赖注入:初学者的代码示例May 14, 2025 am 12:08 AM

你应该关心DependencyInjection(DI),因为它能让你的代码更清晰、更易维护。1)DI通过解耦类,使其更模块化,2)提高了测试的便捷性和代码的灵活性,3)使用DI容器可以管理复杂的依赖关系,但要注意性能影响和循环依赖问题,4)最佳实践是依赖于抽象接口,实现松散耦合。

PHP性能:是否可以优化应用程序?PHP性能:是否可以优化应用程序?May 14, 2025 am 12:04 AM

是的,优化papplicationispossibleandessential.1)empartcachingingcachingusedapcutorediucedsatabaseload.2)优化的atabaseswithexing,高效Quereteries,and ConconnectionPooling.3)EnhanceCodeWithBuilt-unctions,避免使用,避免使用ingglobalalairaiables,并避免使用

PHP性能优化:最终指南PHP性能优化:最终指南May 14, 2025 am 12:02 AM

theKeyStrategiestosiminificallyBoostphpapplicationPermenCeare:1)useOpCodeCachingLikeLikeLikeLikeLikeCacheToreDuceExecutiontime,2)优化AtabaseInteractionswithPreparedStateTemtStatementStatementSandProperIndexing,3)配置

PHP依赖注入容器:快速启动PHP依赖注入容器:快速启动May 13, 2025 am 12:11 AM

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增强codemodocultion,可验证性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

PHP中的依赖注入与服务定位器PHP中的依赖注入与服务定位器May 13, 2025 am 12:10 AM

选择DependencyInjection(DI)用于大型应用,ServiceLocator适合小型项目或原型。1)DI通过构造函数注入依赖,提高代码的测试性和模块化。2)ServiceLocator通过中心注册获取服务,方便但可能导致代码耦合度增加。

PHP性能优化策略。PHP性能优化策略。May 13, 2025 am 12:06 AM

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)启用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替换loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

PHP电子邮件验证:确保正确发送电子邮件PHP电子邮件验证:确保正确发送电子邮件May 13, 2025 am 12:06 AM

phpemailvalidation invoLvesthreesteps:1)格式化进行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具