关于记忆使用和对象破坏的PHP致命错误到底会发生什么?内存会自动释放致命错误吗?
我真的想了解有关该主题的更多信息,并且在PHP手册中找不到。
我是否应该担心尝试{}捕获{}我的功能,以便我可以在捕获{}中破坏我的对象,或者它会自动发生?它是瞬间的吗?
添加示例:
$objectOne = new stdClass();
$objectOne->statement = "Hello";
$objectTwo = new stdClass();
randomFunctionThatShouldCauseAnError();
$objectTwo->statement = "Error before this";
在上面的轴样本中,$ objectOne是否会在randomFunctionThatShouldCauseAnError
引起的错误上自动释放?或者我应该做以下操作:
$objectOne = new stdClass();
$objectOne->statement = "Hello";
$objectTwo = new stdClass();
try{
randomFunctionThatShouldCauseAnError();
}catch (Error $e){
$objectOne = null;
$objectTwo = null;
}
$objectTwo->statement = "Error before this";
对不起问题的垃圾邮件,但是我已经为此挣扎了一段时间,我想知道在代码中发生致命错误时如何处理记忆。
非常感谢!
我是否应该担心尝试{}捕获{}我的功能,以便我可以在捕获{}中破坏我的对象,或者它会自动发生?它是瞬间的吗?
如果要保持代码运行,则应捕获异常,否则您可以轻松地从程序中产生意外的行为。如果您没有捕获异常,则可以抛出致命错误并停止执行代码,因此,操作系统将从内存中倾倒任何内容。
您也应该注意不要暴露敏感信息(即,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"
您应该相应地对待错误,以使您没有意外的行为。