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 :

Utilisation de break


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 032
    Points : 1 052
    Points
    1 052
    Par défaut Utilisation de break
    Bonjour à toutes et à tous,

    En refondant des fichiers php utilisant mySQL vers mySQLi, je tombe sur d'autres problèmes :

    Dans la fonction suivante, j'utilise plein de break pour diminuer le temps d'exécution.

    Apparemment, cela ne fonctionne plus avec php 7 :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    function covno($L)
    {
      if(ord($L) >= 76 and ord($L) < 81)
      {
        return chr(ord($L)-28);
        break;
      }
      if(ord($L) >= 112 and ord($L) < 117)
      {
        return chr(ord($L)-63+2*(116-ord($L)));
        break;
      }
      if(ord($L) >= 81 and ord($L) < 91)
      {
        return chr(ord($L)+7+2*(90-ord($L)));
        break;
      }
      if(ord($L) >= 117 and ord($L) < 123)
      {
        return chr(ord($L)-10);
        break;
      }
      if(ord($L) >= 65 and ord($L) < 75)
      {
        return chr(ord($L)+39-2*(ord($L)-74));
        break;
      }
      if ($L == 'K')
      {
        return 'A';
        break;
      }
      if(ord($L) >= 107 and ord($L) < 112)
      {
        return chr(ord($L)-45-2*(ord($L)-111));
        break;
      }
      if(ord($L) >= 97 and ord($L) < 107)
      {
        return chr(ord($L)-26);
        break;
      }
      if(ord($L) >= 48 and ord($L) < 58)
      {
        return chr(ord($L)+33);
        break;
      }
    }
    Si je supprime tous les break, cela fonctionne !

    je me fourvoie ou quoi ?

    Cordialement.

    Pierre

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 304
    Points : 15 631
    Points
    15 631
    Par défaut
    return provoque la fin de la fonction avec le retour de la valeur.
    donc le code après, que ça soit break ou autre chose n'est jamais exécuté.

    peut-être que ces tests étaient utilisés dans une boucle avant la refonte de votre code ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- même constat.
    Tous les break; sont à supprimer.

    2- Pour les opérateurs logiques, il est préférable d'utiliser && et || plutôt que and et or (qui on un fonctionnement particulier).

  4. #4
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 032
    Points : 1 052
    Points
    1 052
    Par défaut
    Citation Envoyé par mathieu Voir le message
    ... peut-être que ces tests étaient utilisés dans une boucle avant la refonte de votre code ? ...
    Le code n'a pas été modifié, et cela fonctionnait avec php 5

    Citation Envoyé par mathieu Voir le message
    "return" provoque la fin de la fonction avec le retour de la valeur.
    donc le code après, que ça soit "break" ou autre chose n'est jamais exécuté. ...
    Trop imbibé de Pascal où il n'y a pas de return, mais un result qui lui, ne termine pas la fonction. D'où mes break.

    En php 7, ces break, inutiles, créent une erreur.

    Cordialement.

    Pierre

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 881
    Points : 6 607
    Points
    6 607
    Par défaut
    Moi cette fonction, je la réécrirai comme ça:
    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
    function covno($L) {
        $ord = ord($L);
     
        switch($ord) {
            case $ord < 48: break;
            case $ord < 58: return chr($ord + 33);
            case $ord < 65: break;
            case $ord < 75: return chr($ord + 39 - 2*($ord - 74));
            case 75: return 'A';
            case $ord < 81: return chr($ord - 28);
            case $ord < 91: return chr($ord + 7 + 2*(90 - $ord));
            case $ord < 97: break;
            case $ord < 107: return chr($ord - 26);
            case $ord < 112: return chr($ord - 45 - 2*($ord - 111));
            case $ord < 117: return chr($ord - 63 + 2*(116 - $ord));
            case $ord < 123: return chr($ord - 10);
        }
    }
    en mettant les plages dans l'ordre pour réduire le nombre de tests.

    Dans l'exemple précédent break; et return; sont pour ainsi dire interchangeables, car break sort du switch puis on arrive à la fin de la fonction, et return; sort immédiatement de la fonction. Ce n'est pas tout à fait pareil mais le résultat est le même.

    Mais si on fait la même chose avec des if:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function covno($L) {
        $ord = ord($L);
     
        if ( $ord < 48 )
            return;
     
        if ( $ord < 58 )
            return chr($ord + 33);
     
       //...
    }
    il n'est plus possible d'utiliser break.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  6. #6
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 032
    Points : 1 052
    Points
    1 052
    Par défaut
    Merci "Cosmoknacki" pour cette remise en forme de ma fonction "covno". Je vais l'utiliser car elle est beaucoup plus claire écrite de cette manière.

    Cordialement.

    Pierre

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

Discussions similaires

  1. [Joomla!] utilisation page break
    Par pbayl dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 16/03/2017, 13h45
  2. Comment utiliser page-break-before ou after
    Par alainsm dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 23/07/2010, 05h00
  3. Utilisation Page break
    Par ubititi dans le forum BIRT
    Réponses: 5
    Dernier message: 08/07/2009, 15h40
  4. Utilisation de Break On Colonne Oracle
    Par chental dans le forum Développement
    Réponses: 3
    Dernier message: 22/01/2009, 12h50
  5. Réponses: 4
    Dernier message: 28/05/2006, 22h11

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