Php 致命错误的内存使用情况,是否应尝试捕捉每一行?

Php 致命错误的内存使用情况,是否应尝试捕捉每一行?,php,apache,memory,Php,Apache,Memory,关于内存使用和对象破坏的PHP致命错误会发生什么情况?发生致命错误时,内存是否会自动释放 我真的很想知道更多关于这个主题的信息,但在PHP手册中找不到 我应该担心尝试{}catch{}我的函数,这样我就可以在catch{}中销毁我的对象,还是它会自动发生?是即时的吗 添加示例: $objectOne = new stdClass(); $objectOne->statement = "Hello"; $objectTwo = new stdClass(); randomFunctionT

关于内存使用和对象破坏的PHP致命错误会发生什么情况?发生致命错误时,内存是否会自动释放

我真的很想知道更多关于这个主题的信息,但在PHP手册中找不到

我应该担心尝试{}catch{}我的函数,这样我就可以在catch{}中销毁我的对象,还是它会自动发生?是即时的吗

添加示例:

$objectOne = new stdClass();
$objectOne->statement = "Hello";

$objectTwo = new stdClass();
randomFunctionThatShouldCauseAnError();
$objectTwo->statement = "Error before this";
在上面的AxSample中,$objectOne是否会在应引起错误的
随机函数引起的错误时自动释放?或者我应该做以下事情:

$objectOne = new stdClass();
$objectOne->statement = "Hello";

$objectTwo = new stdClass();
try{
    randomFunctionThatShouldCauseAnError();
}catch (Error $e){
    $objectOne = null;
    $objectTwo = null;
}
$objectTwo->statement = "Error before this";
很抱歉出现了大量问题,但我已经为此挣扎了一段时间,我想知道在代码中出现致命错误时如何处理内存

非常感谢

我应该担心尝试{}catch{}我的函数,这样我就可以在catch{}中销毁我的对象,还是它会自动发生?是即时的吗

如果要保持代码运行,就应该捕获异常,否则程序很容易出现意外行为。 如果您没有捕获异常,可能会抛出致命错误并停止代码执行,因此,操作系统将从内存中转储任何内容

此外,您还应注意不要暴露敏感信息(例如,PDO异常可能会将您的SQL密码抛出到用户屏幕)。 试试这个:

<?php
class Test {
    public $param;

    public function canThrowAnError() {
        $this->param = "Changed right before the exception";
        if (true) {
            throw new \Exception("Message", 10023);
        }
    }
}
如果捕获到异常,代码将继续运行,所有内容都将与异常之前一样正确。以下将导致:

"Changed right before the exception"

您应该相应地处理错误,以免出现意外行为。

如果您的程序以任何方式终止,包括致命错误,整个程序都将从内存中转储。操作系统将释放任何崩溃应用程序的内存。@deceze感谢您的快速回复!你认为你可以带我去看一篇文章或文档,在那里我可以阅读更多关于它的内容?只是我需要一种官方参考,请不要生气。让我们这样说:试着捕捉一个致命的错误。你不能。任何致命错误都会立即杀死您的程序,并且不再执行任何代码。特别是当程序内存不足时,它根本无法执行更多的代码(因为它必须使用更多的内存来执行).@deceze register\u shutdown\u function()无法捕获致命错误?如果是的话,我应该清除那里的内存。因为关闭函数在做任何有用的事情时可能会尝试分配新内存(事实上,即使只是调用该关闭函数也需要分配更多内存),如果内存不足,这根本不可能发生。只有知道如何处理异常,才能捕获异常。本能地捕捉每一个可能的异常都是胡说八道。除非你有一个明确的计划去做某事,否则不要抓住它。例如,如果是关于查询中语法错误的
pdo异常
,或者数据库已死亡,该怎么办?在运行时如何处理这些错误?没有什么你唯一能做的就是死,让程序员或系统管理员来解决问题。所以让异常杀死程序。我认为让PHP解释器用致命错误杀死程序与自己捕获异常不同。您可以显示一个漂亮的自定义错误代码,这样您的客户机就可以更快地向您报告错误。此外,致命错误通常会导致错误的结果(web应用程序或脚本未记录错误)。我同意你必须知道该做什么,但最后你可以做的就是
die()
it。这是web服务器的工作。在开发过程中,您希望看到异常的所有血淋淋的细节。在生产环境中,您可以在php.ini中使用
display\u error=false
来消除错误,并将web服务器配置为在php产生任何错误时显示一个漂亮的5xx页面。您不需要为代码增加这种负担。简单点,同意你的观点。保持简单更好。我编辑了我的答案,因为我认为我没有清楚地表达自己。
"Changed right before the exception"