Discussion:
Gestion des exceptions et php4
(trop ancien pour répondre)
andre rodier
2007-04-16 14:52:57 UTC
Permalink
Bonjour,
je souhaiterais savoir si il est possible de rajouter des blocs try/catch
dans un fichier php sans que cela génère d'erreurs si celui-ci est parsé avec un interpréteur php4.

Un peu comme les directives #define du C :

#if ( PHP_VERSION >= 5 )
# define TRY try
#else
# define TRY
#endif

Ce genre de code a-t-il un équivalent en PHP ?
Merci
thierry
2007-04-16 18:47:08 UTC
Permalink
bonjour
Post by andre rodier
#if ( PHP_VERSION >= 5 )
# define TRY try
#else
# define TRY
#endif
Ce genre de code a-t-il un équivalent en PHP ?
oui

http://fr.php.net/manual/fr/function.define.php
http://fr.php.net/manual/fr/function.defined.php
Olivier Miakinen
2007-04-16 19:07:26 UTC
Permalink
Post by thierry
Post by andre rodier
#if ( PHP_VERSION >= 5 )
# define TRY try
#else
# define TRY
#endif
Ce genre de code a-t-il un équivalent en PHP ?
oui
http://fr.php.net/manual/fr/function.define.php
http://fr.php.net/manual/fr/function.defined.php
Euh... on peut redéfinir ainsi des mots-clés du langage ???

Même si cela était, comment définirais-tu TRY et CATCH pour que le code
suivant ne génère aucune erreur ?

TRY {
$error = 'Toujours lancer cette erreur';
throw new Exception($error);

// le code suivant une exception n'est pas exécuté.
echo 'Jamais exécuté';
}
CATCH (Exception $e) {
echo "Capture de l'exception : ", $e->getMessage(), "\n";
}
thierry
2007-04-16 21:29:46 UTC
Permalink
Post by Olivier Miakinen
Euh... on peut redéfinir ainsi des mots-clés du langage ???
Euh non effectivement, enfin pas à cette heure de la soirée en tout
cas.
Je pense que j'avais généralisée la question à "est ce que dans un même
script on peut avoir du code correspondant à plusieurs version de PHP ?"
Post by Olivier Miakinen
Même si cela était, comment définirais-tu TRY et CATCH pour que le code
suivant ne génère aucune erreur ?
je ne redéfini pas un mot clé et réflexion faite, j'ai parlé bien vite,
mais je dicerne un début capillotracté de solution

A valider sur un PHP4, et si ça ne parse pas alors il suffit de mettre
des includes à la place de la définition du code.

<?php

//define('PHP_V5', 1);

if ( defined("PHP_V5") ) {
function throwNewException($error) {
throw new exception($error);
}

function tryCatch($f) {
try {
$f();
}
catch (Exception $e) {
echo "Capture de l'exception : ", $e->getMessage(), "\n";
}
}

}
else {
function throwNewException($error) {
echo $error;
}

function tryCatch($f) {
$f();
}
}

function go() {
$error = 'Toujours lancer cette erreur';
throwNewException($error);
// le code suivant une exception n'est pas exécuté.
echo 'Jamais exécuté';
}

tryCatch("go");

?>


mea culpa, on est loin de la solution demandée
Jean-Marc Molina
2007-04-26 22:48:06 UTC
Permalink
Post by andre rodier
je souhaiterais savoir si il est possible de rajouter des blocs try/catch
dans un fichier php sans que cela génère d'erreurs si celui-ci est
parsé avec un interpréteur php4.
#if ( PHP_VERSION >= 5 )
# define TRY try
#else
# define TRY
#endif
Ce genre de code a-t-il un équivalent en PHP ?
En C ce code est traité par le préprocesseur, il n'existe pas d'équivalent
en PHP. Se reposer sur les fonctions de gestion d'erreurs de PHP4 ou migrer
vers PHP5. Par contre j'ai rencontré un "framework" qui utilisait cette
syntaxe pour proposer deux versions du code source : "debug" et "release".
Question d'optimisation j'imagine mais je trouve la solution un peu trop
"hardcore" et sans doute inadaptée pour répondre à un problème.
Continuer la lecture sur narkive:
Loading...