全局变量处理

全局变量处理

问题描述:

虽然我试图以处理警告消息,我得到错误全局变量/数组(去年的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>'; 

您需要声明$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

声明你的函数$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