Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在析构函数中运行PHP应用程序_Php_Oop_Destructor - Fatal编程技术网

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

在析构函数中运行PHP应用程序,php,oop,destructor,Php,Oop,Destructor,假设我有一个典型的PHP应用程序,它基本上是一个路由器,就像Rails中的Sinatra: $app = new App($some_config); $app->get('/', function($app){ display_homepage(); }); 该代码只在“/”路由上注册该函数 将路由与请求URI相匹配并在\uu destruct()magic方法中运行已注册的函数是一个好主意吗?这样我就不需要调用特殊的函数,比如$app->run()。我假设在销毁结束之前没有任何东

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

$app = new App($some_config);
$app->get('/', function($app){
  display_homepage();
});
该代码只在“/”路由上注册该函数

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


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

有一些理由不这样做

您无法使用
寄存器\u关闭\u功能“捕获”致命错误,因为它在析构函数之前工作:

即使使用
set\u exception\u处理程序
,也无法从外部捕获此析构函数的异常


因此,您的访问者可以看到白色屏幕(甚至更糟的是,错误)。

这是您可以做的事情。这不是一件明智的事情,也不是析构函数的用途,任何人看到你的代码都会想知道你在写代码时抽了什么,但这是你可以做的事情。我的第一反应是问你为什么选择析构函数而不是构造函数来实现你所有的魔法。然后,我开始想知道还有什么其他的魔法方法可以这样滥用;可能是
\uu toString()
然后
回显
运行它的对象?或者您可以使用
\u set
并编写
$my\u object->do\u magic=true在构造函数中不可能,因为我必须允许注册新路由。带有串音的回声interesting@thelolcat你知道我在开玩笑吧?您将为此赢得的唯一奖励是模糊代码。实际上,在特定的上下文中执行(例如,不允许出现异常),特别是当您依赖于到达脚本末尾并在PHP关闭阶段执行脚本时(此时很多事情都变得不可能)。