2012-07-27 87 views
0

雖然我試圖以處理警告消息,我得到錯誤全局變量/數組(去年的print_r行):全局變量處理

注意:未定義的變量:錯誤的.... ....

我試圖聲明$ errors功能以外,但同樣的問題。

感謝

我的代碼:

set_error_handler('validation_error_handler', E_WARNING); 

function validation_error_handler($error_no, $error_message) 
{ 
    global $errors; 
    $errors[] = $error_message; 
} 

echo '<pre>'; print_r($errors); echo '</pre>'; 

回答

3

您需要聲明$errors作爲數組第一:

set_error_handler('validation_error_handler', E_WARNING); 
$errors = array(); // Add this... 

更新:

set_error_handler('validation_error_handler', E_WARNING); 

$errors = array(); 

function validation_error_handler($error_no, $error_message) 
{ 
    global $errors; 
    $errors[] = $error_message; 
} 

echo preg_match(); 

echo '<pre>'; print_r($errors); echo '</pre>'; 

這將打印

<pre>Array 
(
    [0] => preg_match() expects at least 2 parameters, 0 given 
) 
</pre> 

確保您出現錯誤/警告之前,你print_r($errors);

+0

我做過。數組中應該存儲2個警告錯誤。故意靠自己完成,但沒有任何迴應。數組看起來空了。 – BentCoder 2012-07-27 14:47:38

+1

已更新的答案。聽起來像你可能會試圖print_r錯誤發生之前..上面的例子工程。我打電話preg_match沒有任何attribs。 – 2012-07-27 14:50:36

+0

完美。謝謝。 – BentCoder 2012-07-27 15:00:29

1

聲明你的函數$errors之外,那麼按引用傳遞到你的函數。

$errors = array(); 

function validation_error_handler($error_no, $error_message, &$errors) 
{ 
    $errors[] = $error_message; 
} 

echo '<pre>'; print_r($errors); echo '</pre>'; 

避免以這種方式使用全局變量,因爲如果包含在其他文件中,會導致衝突。

另外,請在php的變量範圍內閱讀:http://php.net/manual/en/language.variables.scope.php