关于内存使用和对象破坏的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
}
很抱歉有问题的垃圾邮件,但我一直在努力解决这个问题,我想知道如果我的代码出现致命错误,如何处理内存。
非常感谢!
答案 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"
您应该相应地处理错误,这样您就不会有意外行为。