致命错误的内存使用情况,我应该尝试抓住每一行吗?

时间:2018-02-05 15:23:39

标签: php apache memory

关于内存使用和对象破坏的PHP致命错误会发生什么?内存会因致命错误而自动释放吗?

我真的想了解更多关于这个主题的内容,而且无法在PHP手册中找到它。

我应该担心Try {} catch {}我的函数,所以我可以在catch {}中破坏我的对象,还是自动发生?是时候了吗?

添加了示例:

randomFunctionThatShouldCauseAnError

在上面的例子中,$ objectOne会自动释放由$objectOne = new stdClass(); $objectOne->statement = "Hello"; $objectTwo = new stdClass(); try{ randomFunctionThatShouldCauseAnError(); }catch (Error $e){ $objectOne = null; $objectTwo = null; } $objectTwo->statement = "Error before this"; 引起的错误吗?或者我应该做以下事情:

{"accountId":"XXXXXXXXXX", // This should be saved
    "creditCardNo":"XXXXXX" //This should NOT Be saved
}

很抱歉有问题的垃圾邮件,但我一直在努力解决这个问题,我想知道如果我的代码出现致命错误,如何处理内存。

非常感谢!

1 个答案:

答案 0 :(得分:-1)

  

我应该担心Try {} catch {}我的函数,所以我可以在catch {}中破坏我的对象,还是自动发生?是时候了吗?

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

此外,您应该注意不要暴露敏感信息(即PDOException可以将您的SQL密码丢给用户的屏幕)。 试试这个:

<?php
class Test {
    public $param;

    public function canThrowAnError() {
        $this->param = "Changed right before the exception";
        if (true) {
            throw new \Exception("Message", 10023);
        }
    }
}

然后

$test = new Test();
$test->param = "Yay, it works still...";
try {
    $test->canThrowAnError();
} catch (\Exception $e) {
    // Do something. Log, inform the user..
}
echo $test-param;

如果您捕获到异常,代码将继续,并且异常之前的所有内容都将正确。以下将导致:

"Changed right before the exception"

您应该相应地处理错误,这样您就不会有意外行为。