构造函数里注册了一个shutdown函数,echo ‘【来自shutdown函数】’
析构函数里echo '【来自析构函数】'一个和尚,一个道士,没什么太大的区别嘛总是要shudown函数在前,析构函数在后,连着执行的。我看到的问题比较浅,所以我武断的选择原生的析构函数,而弃用额外增生的shutdown函数。莫非这两个函数背后,没有什么别的影响性能什么的细节?
析构函数里echo '【来自析构函数】'一个和尚,一个道士,没什么太大的区别嘛总是要shudown函数在前,析构函数在后,连着执行的。我看到的问题比较浅,所以我武断的选择原生的析构函数,而弃用额外增生的shutdown函数。莫非这两个函数背后,没有什么别的影响性能什么的细节?
解决方案 »
- 循环输出时或许id值
- 真心求解:apache+php+mysql配置问题
- 用smarty模板做的cms系统
- 请教程序自动post数据到另外一个页面,为何session和cookie会丢失
- PHP+MSSQL 分页问题(从MySql转为MSSQL)--在线等!
- PHP正则多取问题 _100
- SESSION的问题(急)高手来在线等(急)(急)(急)
- 为什么我关闭了浏览器,但是SESSION仍然不会清空?(没有设置SESSION的过期时间)
- 千分问题之一:详情请看内容(谁能答对送一千分,up者有分,up三次以上者没分,回答问题除外)
- 刚学PHP,想问题一下界面如何设计呀??各位勿见笑
- 求代码,菜鸟入门篇,,不堪感激高手,,在线等
- 如何判断2次http请求,间隔时间内超时?
php中为什么有了 __destruct函数后还没有把register_shutdown_function 置为deprecated ?代码说明一切: 1. <?php
2. class T1
3. {
4. function __construct()
5. {
6. register_shutdown_function(array(&$this, 'shutdown_func'));
7. }
8.
9. function shutdown_func() {
10. $fp = fopen("/tmp/t1.txt", "w+");
11. fputs($fp, "向我开炮\n");
12. fclose($fp);
13. }
14. };
15.
16. $obj = new T1();
17. while (true) {
18. // do nothing
19. }
20. 执行:
21. Fatal error: Maximum execution time of 30 seconds exceeded in /home/hanyh/workspace/website/t1.php on line 19
22. 结果:
23. hanyh@hanyh:~/workspace/git/django-pagination$ more /tmp/t1.txt
24. 向我开炮
25.
26. <?php
27. class T2
28. {
29. function __destruct()
30. {
31. $fp = fopen("/tmp/t2.txt", "w+");
32. fputs($fp, "向我开炮\n");
33. fclose($fp);
34. }
35. };
36.
37. $obj = new T2();
38. while (true) {
39. // do nothing
40. }
41. 执行:
42. Fatal error: Maximum execution time of 30 seconds exceeded in /home/hanyh/workspace/website/t2.php on line 13
43. 结果:
44. hanyh@hanyh:~/workspace/git/django-pagination$ more /tmp/t2.txt
45. /tmp/t2.txt: 没有该文件或目录
46.
47. 由对比可知,使用register_shutdown_function才能保证即使脚本异常中止时,清理函数的代码仍然能够执行。所以在代码中必须在脚本退出时清理资源时,需要使用register_shutdown_function。
register_shutdown_function
只要是终止(包括错误等)它都会执行
而另一个不是,所以不至于是既生瑜何生亮
unset($a); or $a = null;
但是,如果调用一个不存在函数: jdslfj(),那么析构函数的就不灵光了,呵呵。