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 :

[POO ?] Stopper tout à une condition [Fait]


Sujet :

Langage PHP

  1. #1
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut [POO ?] Stopper tout à une condition
    Bonjour,

    J'ai une class qui fait la connexion à un server et qui récupère quelque info à son propos.

    J'aimerais que quand le server n'est pas connecté, tout ce que j'aurais pu faire apres la connexion ne soit pas exécuter.

    Pour l'instant je fais ca avec des if-else mais ca devient vite assez lourd.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $s = new Server(ip, port);
    $s->info();
    Dans mon constructeur j'ai ouvert la connexion et ca renvoie false si c'est pas bon.
    Comment faire pour ne pas exécuter tout ce qui se trouve en dessous de cette ligne ($s = new Server(ip, port)) si ca renvoie false ?
    Sans faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $s = new Server(ip, port);
    if ($s) $s->info();

    Yoshio.

  2. #2
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    La je voit un bon cas pour une exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(!connection...)
        //Si ta connexion se fait pas tu lance une exception
        throw new Exception('Impossible de se connecter');
    La ca arrete net, par contre ca te mettra un message d'erreur...
    Mais bon c'est la seule chose qui existe pour faire ce que tu desire

  3. #3
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Et ca continue l'exécution de la page ?

    J'ai pas envie d'avoir un div coupé en 2 lol

  4. #4
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    C'est le principe de l'exception
    le mieux a la limite c'est le try catch:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ... code ...
    try {
        ... code ...
    }
    catch {
        //Si erreur dans le try on arrive ici
    }
    ... code qui continue ...
    Et donc toujours pareille si on veut provoquer nous meme l'exception on utiliser
    throw new Exception('Impossible de se connecter'); dans le bloc try.
    Mais ce qui est apres le try, catch est quand meme exécuter

  5. #5
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Mais si je fais ça je dois le faire hors de ma classe autour du code que j'ai mis précédemment.

    Il n'y a pas un moyen de faire ca dans la classe elle même ?

  6. #6
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Bien sur que si... C'est ceux a quoi je pensait...
    J'ai mit du code c'est pas pour faire beau, c'est pour l'essayer...

  7. #7
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Code : 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
    18
    19
    20
    21
    class Truc
    {
     
        public function __construct()
        {
            try
            {
                .... code ....
            }
            catch
            {
     
            }
     
        }
     
         public function machin()
        {
            echo 'C\'est un machin ^^';
        }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $s = new Truc();
    $s->machin();

    Faire un truc comme ca ?
    Mais ou mettre le teste si il y a bien eu une connexion et lui faire comprendre de pas exécuter machin si ca a foirer ?

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Salut,

    Jte conseille de chercher un peu sur internet un tutoriel sur les exceptions, tu devrais comprendre assez facilement.

    En gros ça donne qqch comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    echo "debut";
    try {
      $s = new Truc();
      $s->machin();
    } catch {
      echo "Exception !";
    }
    echo "fin";
    Si le constructeur léve une exception (throw new Exception()), ça passe directement dans le bloc catch. Sinon $s->machin() est executé mais pas le bloc catch. Dans les 2 cas "début" et "fin" seront affichés.

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Les exceptions ne sont pas levées toutes seules et il n'y a que quelques extensions qui les prennent en charge (DOM par exemple) sinon ce sont des erreurs standards.

    C'est à vous de gérer l'exception qui a été levée grâce au catch : mettre fin au script (die), ou autres. Exemple fictif :
    Code : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    class SQLException extends SQLException {}
     
    class DB_MySQL extends DB {
        protected $lien;
     
        public function __construct($hote, $bd, $login, $mdp) {
            if (!$this->lien = mysql_connect($hote, $login, $mdp)) {
                throw new SQLException('[mysql_connect] : ' . mysql_error());
            }
            if (!mysql_select_db($bd, $this->lien)) {
                throw new SQLException('[mysql_select_db] : ' . mysql_error());
            }
        }
     
        public function query($query) {
            $ret = mysql_query($query, $this->lien);
            if (!$ret) {
                throw new SQLException("[mysql_query] $query : " . mysql_error());
            }
            return $ret;
        }
     
        ...
    }
     
    try {
        $db = new DB_MySQL('localhost', 'db_julp', 'julp', '****');
        $req = $db->query('SELECT * FROM une_table');
    } catch(SQLException $sqle) {
        die($sql->getMessage());
    }
    ?>
    Le bloc try/catch interceptera toute Exception de type SQLException, que ce soit pour l'instanciation d'une nouvelle connexion ou pour faire une requête. Si nous venions à en rencontrer une, nous mettons fin au script en affichant un message qui la décrit.

    Je vous invite à consulter le tutoriel Exceptions et PHP5 pour de plus amples informations.

  10. #10
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Donc ca n'est pas possible de rendre ca transparent sans rajouter un try/ctach hors de la classe.

    Merci des reponses.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/09/2014, 15h13
  2. exécuter une fonction si toutes les conditions sont validées
    Par dajij dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 10/10/2011, 16h07
  3. [XL-2010] probléme avec une condition sous toute une colonne
    Par Fawez dans le forum Excel
    Réponses: 1
    Dernier message: 12/06/2010, 12h18
  4. [POO] appel d'une méthode d'un autre fichier, le tout objet
    Par aaaaaaaa dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/07/2007, 18h43
  5. Réponses: 3
    Dernier message: 16/04/2004, 16h51

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