2011-02-26 36 views
1
$GLOBALS['failed'] = "no"; 

set_error_handler(function($errno, $errstr) { 
    $GLOBALS['failed'] = "yes"; 
}); 

a_function_that_triggers_the_above_function(); 

echo $GLOBALS['failed']."\n"; # => "no" 

這個匿名函數被觸發,我100%確定。爲什麼GLOBALS值沒有改變?爲什麼全局變量不是在匿名函數中設置的?

+2

作品對我來說太。我們將不得不假設'a_function_that_triggers_an_error();未能完成它的邪惡任務。 – mario 2011-02-26 16:56:36

回答

3

不知道你正在做的是觸發一個錯誤的具體功能是什麼,但使用的代碼這一部分:

$GLOBALS['failed'] = "no"; 

set_error_handler(function($errno, $errstr) { 
    var_dump('handler !'); 
    var_dump($errstr); 
    $GLOBALS['failed'] = "yes"; 
}); 

echo 10/0; 

var_dump($GLOBALS['failed']); 


我得到以下輸出:

string 'handler !' (length=9) 
string 'Division by zero' (length=16) 
string 'yes' (length=3) 


其中顯示:

  • 處理函數實際上被稱爲
  • 全局變量受到影響。

(我使用PHP 5.3.2)

+0

我在調用觸發更改的函數之前打印出全局變量。 – randomguy 2011-02-26 16:56:01

+0

@randomguy哦^^所以你已經解決了你的問題,我猜;-) – 2011-02-26 16:56:56

相關問題