variables globales modification par fonction comportant un exit() solution

Petit nouveau ! | 8 Messages

28 juil. 2016, 16:02

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

28 juil. 2016, 16:25

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 ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 8 Messages

29 juil. 2016, 11:36

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

Petit nouveau ! | 8 Messages

08 août 2016, 11:49

Bonjour,

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

Merci :D

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

08 août 2016, 14:05

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
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 8 Messages

09 août 2016, 11:40

Bonjour,

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

09 août 2016, 12:18

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.
Quand tout le reste a échoué, lisez le mode d'emploi...