Page 1 sur 1

variables globales modification par fonction comportant un exit() solution

Posté : 28 juil. 2016, 16:02
par patou1007
Bonjour

J'ai le script suivant:

Code : Tout sélectionner

<?php $var_test="il est fort"; $stop_on_warning=true; $warning=2; function change_force(){ global $var_test; $var_test="il est encore plus fort"; exit; } change_force(); echo $var_test; ?>
Sans le exit dans la fonction cela fonctionne evidemment.

Je cherche une solution pour modifier les variables globales même en présence de exit, pouvez-vous me proposer des solutions ?

Merci :D

Re: variables globales modification par fonction comportant un exit() solution

Posté : 28 juil. 2016, 16:25
par @rthur
Bonjour,

exit permet d'arrêter le traitement PHP là où il en est.

Donc dans ton cas, la variable globale est bien modifiée mais quand tu fait exit ça stoppe tout à la manière d'un arrêt d'urgence et donc ça ne t'affiche pas le résultat.

A mon avis c'est ta façon de faire qui est à revoir.
Que cherches tu à faire exactement ?

Re: variables globales modification par fonction comportant un exit() solution

Posté : 29 juil. 2016, 11:36
par patou1007
Bonjour,

J'ai fait ce petit script pour tester.

En fait j'ai un gros script principal dont voici un extrait:

Code : Tout sélectionner

function copy_errors($mess){ global $var_errors; $var_errors=$mess; //$var_errors=$noncritical_errors; } function my_exit($code) { global $stop_on_warning; global $warning; //global $noncritical_errors; //global $var_errors; // affichage des avertissements eventuels if(count($warning) > 0) { $noncritical_errors = "\n"; $noncritical_errors .= "----------------------------------------------------------------------\n"; $noncritical_errors .= "Des avertissements et/ou des erreurs non critiques ont ete rencontres:\n"; for($i = 0; $i < count($warning); $i++) { $noncritical_errors .= " " . $warning[$i] . "\n"; } $noncritical_errors .= "----------------------------------------------------------------------\n"; if($stop_on_warning) { $noncritical_errors .= "\nUne option a ete positionnee pour un arret des traitements meme sur avertissements ou erreurs non critiques\n\n"; } //print $noncritical_errors; } displayerrors($noncritical_errors); copy_errors($noncritical_errors); //$var_errors=$noncritical_errors; //$var_errors=displayerrors($noncritical_errors); //copy_errors(); //return($noncritical_errors); // fin des operations closelog(); exit($code); }
ce que je cherche à faire c'est isoler les erreurs et les copier dans une variable.
La fonction my_exit(code) est utilisée à plusieurs endroit du programme ( exemple on fait my_exit(1) souvent ).

Je ne veux pas me débarrasser du exit(code) à la fin de la fonction de la fonction my_exit(code) pour ne pas impacter le fonctionnement de mon script.

ma variable globale $non_criticals_errors n'était pas modifiée après l'appel de la fonction et qu'elle contenait toujours la valeur initiale d'affectation plus haut dans le code dans sa déclaration en dehors de la fonction my_exit($code).

Pouvez-vous me donner une astuce pour permettre cette modification ? :D

Re: variables globales modification par fonction comportant un exit() solution

Posté : 08 août 2016, 11:49
par patou1007
Bonjour,

Pouvez-vous m'aider à résoudre mon problème ?

Merci :D

Re: variables globales modification par fonction comportant un exit() solution

Posté : 08 août 2016, 14:05
par @rthur
Tu ne serais pas en train de réinventer les exceptions avec leur try...catch ?
http://www.finalclap.com/faq/325-php-ex ... -try-catch
https://secure.php.net/manual/fr/langua ... ptions.php

Re: variables globales modification par fonction comportant un exit() solution

Posté : 09 août 2016, 11:40
par patou1007
Bonjour,

Pouvez-vous me proposer un exemple de code adapté à mon script en y incluant les exceptions (try... catch ) ?

Re: variables globales modification par fonction comportant un exit() solution

Posté : 09 août 2016, 12:18
par @rthur
Pouvez-vous me proposer un exemple de code adapté à mon script en y incluant les exceptions (try... catch ) ?
Malheureusement non car je ne comprends pas à quoi sert ton code.
En revanche dans les 2 liens que je t'ai donné, il y a des exemples donc à toi de regarder si ça pourrait te servir car si c'est bien ça ce que tu cherches à faire, la meilleure solution est d'utiliser les exceptions.