1. 程式人生 > >register_shutdown_function函數詳解

register_shutdown_function函數詳解

支持 函數詳解 友好 apache 目錄 perror 不能 public handle

設定錯誤和異常處理三函數

  1. register_shutdown_function(array(‘Debug’,‘fatalError’)); //定義PHP程序執行完成後執行的函數
  2. set_error_handler(array(‘Debug’,‘appError’)); // 設置一個用戶定義的錯誤處理函數
  3. set_exception_handler(array(‘Debug’,‘appException’)); //自定義異常處理。

下面講一下register_shutdown_function() 函數.

功能:register_shutdown_function() 函數可實現當程序執行完成後執行的函數,其功能為可實現程序執行完成的後續操作。程序在運行的時候可能存在執行超時,或強制關閉等情況,但這種情況下默認的提示是非常不友好的,如果使用register_shutdown_function()函數捕獲異常,就能提供更加友好的錯誤展示方式,同時可以實現一些功能的後續操作,如執行完成後的臨時數據清理,包括臨時文件等。

可以這樣理解調用條件:

1、當頁面被用戶強制停止時

2、當程序代碼運行超時時

3、當PHP代碼執行完成時,代碼執行存在異常和錯誤、警告

實例說明

1. 一個簡介的例子 , 調用一個函數

  1. <?php
  2. function test() {
  3. echo "test()";
  4. }
  5. register_shutdown_function(array("test"));
  6. echo "show: ";
  7. ?>

這個例子輸出

  1. show: test()

這個函數的作用就是在退出腳本前,調用已經註冊的函數,並執行該函數。

2. 在類中用一個數組作為一個參數

  1. <?php
  2. class ClassDemo {
  3. public function __construct() {
  4. register_shutdown_function(array($this, "f"));
  5. }

  6. public function f() {
  7. echo "f()";
  8. }
  9. }

  10. $demo = new ClassDemo();
  11. echo "before </br>";
  12. ?>

輸出:

  1. before
  2. f()

3. 帶有參數的例子:

  1. <?php
  2. function f($str) {
  3. echo $str."<br>";
  4. }

  5. register_shutdown_function("f","hello");
  6. class ClassDemo {
  7. public function __construct() {
  8. register_shutdown_function(array($this, "f"),"hello");
  9. }

  10. public function f($str) {
  11. echo "f():".$str;
  12. }
  13. }

  14. $demo = new ClassDemo();
  15. echo "before </br>";
  16. ?>

註意事項

1,register_shutdown_function()函數可重復調用,但執行的順序與註冊的順序相同
2,如果在調用register_shutdown_function()函數之前有exit()函數調用,register_shutdown_function()函數將不能執行
3,PHP4後支持註冊函數參數傳遞
4,在某些服務端,如Apache,當前目錄在register_shutdown_function()函數中能夠改變
5,register_shutdown_function()函數執行在headers發送之後

register_shutdown_function函數詳解