在析构函数中运行PHP应用程序

时间:2014-03-20 23:22:18

标签: php oop destructor

假设我有一个典型的PHP应用程序,它基本上是一个路由器,就像Rails中的Sinatra:

$app = new App($some_config);
$app->get('/', function($app){
  display_homepage();
});

该代码除了在“/”路由上注册该功能外别无其他。

将路由与请求URI匹配并在__destruct()魔术方法中运行已注册的函数是一个好主意吗?这样我就不需要调用特殊函数,比如$app->run()。我假设在__destruct结束之前没有任何东西实际上被“破坏”,对吗?

我问的原因是看我是否有机会赢得诺贝尔奖。请注意在定义路由后,所有PHP路由器都要求您调用某种run()方法?我的第一个会自动完成!

1 个答案:

答案 0 :(得分:0)

有一些理由不这样做。

你无法“捕获”register_shutdown_function的致命错误,因为它在析构函数之前有效:https://github.com/php/php-src/blob/master/main/main.c#L1769

即使使用set_exception_handler,也无法从外部捕获此析构函数的异常。

因此,您的访问者可能会看到白屏(或更糟糕的是,错误)。