Fox Asked:2022-09-07 14:51:16 +0000 UTC2022-09-07 14:51:16 +0000 UTC 2022-09-07 14:51:16 +0000 UTC PHP,语法错误处理 772 再会。 我正在编写一个小的 ErroeHandler 来处理 PHP 错误,但我无法处理语法错误,例如,如果缺少分号,或者存在无效字符。 人为处理 PHP 语法错误的方法有哪些? php 2 个回答 Voted Best Answer Ипатьев 2022-09-07T17:12:13Z2022-09-07T17:12:13Z 好问题,但没有经过深思熟虑。 语法错误的处理方式与其他任何错误一样。 当然,如果在加载之前发生错误,处理程序将无法工作:例如,在连接它的脚本中,或者如果错误在处理程序本身中。但这些都是你可以忍受的明显案例。 但是,如果在处理程序已经加载后任何其他文件中出现语法错误,那么它将被处理得很好。 想象一下,我们有一个应用程序加载器文件(几乎从不改变),它首先包含系统文件(包括错误处理程序),然后包含具有业务逻辑的文件。使用这种方案,所有带有业务逻辑的文件中的错误都会被完美地捕捉到: <?php require 'error_handler.php'; require 'controller.php'; controller.php 中的语法错误将像任何其他错误一样被捕获。也就是说,在 99.99% 的项目文件中,都会捕获语法错误。 Алексей Шиманский 2022-09-07T15:19:34Z2022-09-07T15:19:34Z 不太可能存在,因为分析器无法知道开发人员到底在想什么,因此为他做这项工作是没有意义的,因为意思可以完全改变为相反的意思 这些例子是平庸的。 function test { if () { ... if (...) { тут код В БЛОК IF тут код ВНЕ IF ещё код ВНЕ IF } } 忘记了第二个的右括号if。解析器应该自动把括号放在哪里?在第一行之后,而不是在最后一行之后,他应该如何理解? 或者这个错误: echo $wrong[key]; // Use of undefined constant key 分析仪应该做什么?用引号括起来?如果程序员在那里忘记了一块钱并想写 echo $wrong[$key]; 另一个例子,纯虚拟的,虽然很愚蠢 $test= 1; echo $test '1'; 这里应该有什么?也许.(串联)或也许+(加法)。分析仪应该选择什么? 并且有成千上万这样的例子。分析仪根本不知道您想要什么,因为 对于一个语法错误,有成千上万的选项可以纠正(类似于国际象棋的组合,你可以去任何地方,但只有你知道需要遵循的策略)。所以放弃了魔法仪器的想法,因为。读心工具还没有发明%)
好问题,但没有经过深思熟虑。
语法错误的处理方式与其他任何错误一样。
当然,如果在加载之前发生错误,处理程序将无法工作:例如,在连接它的脚本中,或者如果错误在处理程序本身中。但这些都是你可以忍受的明显案例。
但是,如果在处理程序已经加载后任何其他文件中出现语法错误,那么它将被处理得很好。
想象一下,我们有一个应用程序加载器文件(几乎从不改变),它首先包含系统文件(包括错误处理程序),然后包含具有业务逻辑的文件。使用这种方案,所有带有业务逻辑的文件中的错误都会被完美地捕捉到:
controller.php 中的语法错误将像任何其他错误一样被捕获。也就是说,在 99.99% 的项目文件中,都会捕获语法错误。
不太可能存在,因为分析器无法知道开发人员到底在想什么,因此为他做这项工作是没有意义的,因为意思可以完全改变为相反的意思
这些例子是平庸的。
忘记了第二个的右括号
if。解析器应该自动把括号放在哪里?在第一行之后,而不是在最后一行之后,他应该如何理解?或者这个错误:
分析仪应该做什么?用引号括起来?如果程序员在那里忘记了一块钱并想写
另一个例子,纯虚拟的,虽然很愚蠢
这里应该有什么?也许
.(串联)或也许+(加法)。分析仪应该选择什么?并且有成千上万这样的例子。分析仪根本不知道您想要什么,因为 对于一个语法错误,有成千上万的选项可以纠正(类似于国际象棋的组合,你可以去任何地方,但只有你知道需要遵循的策略)。所以放弃了魔法仪器的想法,因为。读心工具还没有发明%)