IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

error handling et best practices


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut error handling et best practices
    Bonjour,

    je considère ce sujet comme important, vu qu'il impacte la conception. Ayant une incertitude, je lance cette discussion. Évidemment, j'ai déjà cherché sur le web qu'est-ce qu'on dit. Mais, tout ce que j'ai trouvé est écrit en anglais, et même si je me débrouille, je ne suis pas un virtuose.

    Voici une façon de faire, et j'aimerais avoir votre avis.

    J'ai créé la classe ErrorHandling. ErrorHandling.php :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    class ErrorHandling
    {
        public string $msg;
     
        public function __construct($msg)
        {
            $this->msg=$msg;
        }
     
        public function disp_msg()
        {
            $page = new PhpEcho([DIR_ROOT, 'view Layout.php']);  //PhpEcho est une classe "moteur de rendu"
            $page->addChildFromCurrent('body', 'block endSession.php',['msg'=>$this->msg]);//en gros,endSession.php va
            // récupérer  $this->msg
            echo $page;
        }
    }

    endSession.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    <?= $this['msg'] ?>

    utilisation de la classe ErrorHandling :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     $hash = hash_file('md5',   $filepath);
     $pps = new PDOPlusPlus(PDOPlusPlus::MODE_SQL_DIRECT);
     sql = 'SELECT count(*) AS count from `fichier_uploade` where hash="' . $hash . '"';  
     
     $ret = $pps->select($sql);  /*pour vous rassurer, avec PDOPlusPlus, $hash va être échappé lors de l'exécution de la requête */
     if ( $ret[0]['count'] > 0 )
     {
          $exit_hash=new ErrorHandling('Impossible to import the file because already in database');
          $exit_hash->disp_msg();exit;   // ne pas exécuter la suite du script
     
     }

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Salut,
    Il y'a une question ? ou c'est juste pour nous présenter ta classe ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Salut,
    oui, présenter la classe mais surtout recueillir un avis !
    j'aimerais avoir votre avis.

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Dans l'état ta classe ne fait rien de plus qu'un echo un peu compliqué.

    A la limite elle gagnerait à être statique et donc appeler directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ErrorHandling::disp_msg($msg);
    Tu t'évites une instances qui ne sert à rien , c'est plus rapide et lisible à l'utilisation.

    Dans tous les cas quand c'est possible utilise des exceptions , soit les standard déjà fournies soit tu créer les tiennes si c'est nécessaire
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Merci pour ta réponse.

    OK pour faire une méthode statique. Néanmoins, tu conseilles aussi, si possible, les exceptions. Dans mon cas, ça me semblerait plus propre. Il me semble nécessaire de créer mon propre userException.
    Jamais fait, donc j'ai quelques questions. Je vais dire comment je pense m'y prendre et merci de me corriger.

    D'abord, je crée la classe userException qui hérite de la classe Exception.

    Ensuite, il faut préciser que j'ai une architecture MVC et que donc, toutes les fonctions "contrôleurs" vont être appelées par un fichier index.php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $controller = new $routes[$action]; 
    $controller->invoke($data);  //toutes les classes "contrôleurs" comportent une méthode invoke()
    Donc dans le contrôleur où je dois lancer une exception, je fais throw new userException("message d'erreur") et dans index.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try {
    ...le code
    }
    catch(userException $e)
    {
      echo 'Une exception a été lancée. Message d\'erreur : ', $e->getMessage();
    }
    Qu'est-ce que tu en penses ?

  6. #6
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Pour info, les 2 classes utilisées (PhpEcho et PDOPlusPlus ) ont été créées par rawsrc : https://www.developpez.net/forums/bl...version-2-0-0/ et https://www.developpez.net/forums/bl...dutiliser-pdo/ et voici ce qu'il disait hier des try catch :
    C'est quoi cette connerie ? Tu n'as pas besoin d'un try catch. Un fichier déjà traité n'est pas une erreur. Tu fais un hash des fichiers déjà importés et avant d'en importer un autre tu vérifies si son hash n'a pas déjà été pris en compte.

    On utilise un try catch pour gérer des erreurs systèmes probables. Ce n'est pas en aucun cas prévu pour gérer les cas particuliers liés à un utilisateur.

Discussions similaires

  1. Réponses: 11
    Dernier message: 16/06/2006, 13h46
  2. swing best practices.
    Par bbclone dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 07/06/2006, 10h14
  3. Réponses: 4
    Dernier message: 23/05/2006, 14h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo