2012-07-27 3 views
0

Alors que je suis en train de gérer les messages d'avertissement, je reçois erreur variable globale/tableau (sur la dernière ligne de print_r):gestion des variables globales

Avis: Undefined variable: erreurs .... ....

J'ai essayé de déclarer erreurs $ en dehors de la fonction aussi bien, mais même problème.

Merci

Mon code:

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>'; 

Répondre

3

Vous devez déclarer $errors comme un tableau premier:

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

Mise à jour:

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>'; 

Ce imprimera

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

Assurez-vous que votre erreur/avertissement se produit avant print_r($errors);

+0

je l'ai fait. Le tableau doit contenir 2 erreurs d'avertissement. Délibérément fait par moi-même mais ne fait écho à rien. Array semble vide. – BentCoder

+1

mise à jour de la réponse. On dirait que vous essayez d'imprimer des erreurs avant qu'elles ne se produisent. Exemple ci-dessus fonctionne. J'ai appelé preg_match sans attribs. –

+0

Juste parfait. Je vous remercie. – BentCoder

1

Déclarez $errors en dehors de votre fonction passe ensuite par référence dans votre fonction. Évitez d'utiliser des variables globales de cette manière, car elles peuvent provoquer des conflits si elles sont incluses dans d'autres fichiers.

En outre, lire sur la portée des variables en php: http://php.net/manual/en/language.variables.scope.php