class MyDestructableClass {
function __construct() {
print "\nIn constructor\n";
$this->name = "MyDestructableClass";
}
function __destruct() {
print "\nDestroying " . $this->name . "\n";
}
}
$obj = new MyDestructableClass();
Run Code Online (Sandbox Code Playgroud)
当上面的脚本处于复杂的环境中时,__destruct不会被调用exit,但是我无法轻易地重现它.有人注意到了吗?
编辑
我将在这里发布所有内容,它是symfony的测试环境,这意味着如果您熟悉框架,您可以轻松地重现它:
require_once dirname(__FILE__).'/../bootstrap/Doctrine.php';
$profiler = new Doctrine_Connection_Profiler();
$conn = Doctrine_Manager::connection();
$conn->setListener($profiler);
$t = new lime_test(0, new lime_output_color());
class MyDestructableClass {
function __construct() {
print "\nIn constructor\n";
$this->name = "MyDestructableClass";
}
function __destruct() {
print "\nDestroying " . $this->name . "\n";
}
}
$obj …Run Code Online (Sandbox Code Playgroud) 我有一个带有异常处理程序的脚本.在异常之后脚本退出之前,此异常处理程序会清除几个连接.
我想从这个异常处理程序中重新抛出异常,以便它由PHP自己的最后一个异常处理程序处理,其中错误被写入PHP的错误日志,或者PHP.ini中配置的默认错误日志.
不幸的是,这似乎不太可能,如下所述:
http://www.php.net/manual/en/function.set-exception-handler.php#68712
将导致致命错误:抛出没有堆栈帧的异常
是否有另一种方法可以将错误冒充堆栈,以便PHP在我的异常处理程序清理完成后处理它?