相关疑难解决方法(0)

什么时候不会在PHP中调用__destruct?

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 destructor

49
推荐指数
6
解决办法
3万
查看次数

在异常处理程序中抛出异常

我有一个带有异常处理程序的脚本.在异常之后脚本退出之前,此异常处理程序会清除几个连接.

我想从这个异常处理程序中重新抛出异常,以便它由PHP自己的最后一个异常处理程序处理,其中错误被写入PHP的错误日志,或者PHP.ini中配置的默认错误日志.

不幸的是,这似乎不太可能,如下所述:

http://www.php.net/manual/en/function.set-exception-handler.php#68712

将导致致命错误:抛出没有堆栈帧的异常

是否有另一种方法可以将错误冒充堆栈,以便PHP在我的异常处理程序清理完成后处理它?

php error-handling exception-handling exception

11
推荐指数
2
解决办法
4019
查看次数