假设我有一个典型的PHP应用程序,它基本上是一个路由器,就像Rails中的Sinatra:
$app = new App($some_config);
$app->get('/', function($app){
display_homepage();
});
该代码除了在“/”路由上注册该功能外别无其他。
将路由与请求URI匹配并在__destruct()
魔术方法中运行已注册的函数是一个好主意吗?这样我就不需要调用特殊函数,比如$app->run()
。我假设在__destruct结束之前没有任何东西实际上被“破坏”,对吗?
我问的原因是看我是否有机会赢得诺贝尔奖。请注意在定义路由后,所有PHP路由器都要求您调用某种run()方法?我的第一个会自动完成!
答案 0 :(得分:0)
有一些理由不这样做。
你无法“捕获”register_shutdown_function
的致命错误,因为它在析构函数之前有效:https://github.com/php/php-src/blob/master/main/main.c#L1769
即使使用set_exception_handler
,也无法从外部捕获此析构函数的异常。
因此,您的访问者可能会看到白屏(或更糟糕的是,错误)。