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 :

Une question de débutant sur les conditions


Sujet :

Langage PHP

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 098
    Points : 946
    Points
    946
    Par défaut Une question de débutant sur les conditions
    Bonjour à tous,

    J'ai trouvé ce code et j'ai du mal a comprende ce que fais le dernier return
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    		if (!parent::install() OR		
    			!$this->registerHook('rightColumn') OR
    			!$this->registerHook('header'))
     
    			return (false);
     
    		$this->setDefaults();
     
    		if (!$this->saveSettings()) return false;
     
    		return true;
    Je pense que c'est égal à:
    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
     
    		if (!parent::install() OR		
    			!$this->registerHook('rightColumn') OR
    			!$this->registerHook('header')){
     
    			return (false);
    }
     
    		$this->setDefaults();
     
    		if (!$this->saveSettings()){ return false;
    }else{
     
    		return true;
    }
    Je suis un peu confu car il se trouve à la même hauteur que le if alors qu'il devarit etre tabulé sur la droite, non?

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonsoir,

    tu as vu juste, ta reprise du code est exacte.
    Voilà le problème lorsque l'auteur ne tient aucun compte des bonnes pratiques en matière de codage et de présentation.
    Pour le relire c'est mariole. If faut toujours veiller à préserver la lisbilité du code source sinon bonjour le temps perdu. Avec la pratique, des bons réflexes s'installent et facilitent la vie.
    Au début, j'ai commencé par relire mon propre code 2 ou 3 jours après l'avoir pondu, histoire de voir si c'était compréhensible et surtout à quelle vitesse je récupérais la logique. Le temps passé à me maudire m'a poussé à insérer des commentaires, à nommer mes variables de manière explicite et à présenter soigneusement mon code.

    Voici le code présenté de manière lisible au premier coup d'oeil:
    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
    <?php
     
    if ( ! (parent::install() && $this->registerHook('rightColumn') && $this->registerHook('header'))) {
       return false;
    }
     
    $this->setDefaults();
     
    if ( ! $this->saveSettings()) {
       return false;  
    }
     
    return true;
     
    ?>
    Un rarccourci quand tu as un test de ce genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (test) {
       return false;
    }
    else {
       return true;
    }
    Le else est optionnel vu que le résultat de la première partie du code te provoque un return.

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 098
    Points : 946
    Points
    946
    Par défaut
    Salut, merci pour ta réponse,

    Mais qu'es-ce le dernier retun true?
    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
     
    <?php
     
    if ( ! (parent::install() && $this->registerHook('rightColumn') && $this->registerHook('header'))) {
       return false;
    }
     
    $this->setDefaults();
     
    if ( ! $this->saveSettings()) {
       return false;  
    }
     
    return true; 
     
    ?>
    Il n'est pas perdu?

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par pierrot10 Voir le message
    Mais qu'es-ce le dernier retun true?
    Il n'est pas perdu?
    Non du tout.
    Si les étapes en ligne 4 se passent bien, le code passe à la ligne 8 puis en ligne 10 si la sauvegarde des paramètres se passe bien, on passe à la ligne 14 => on renvoie true.

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 098
    Points : 946
    Points
    946
    Par défaut
    Ben oui mais je ne comprends toujours pas,
    si on passe à la ligne 14 par qu'a la ligne 10, tout ce passe bien, à quoi sert le return true
    Ceci revient au même, non?
    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
    <?php
     
    if ( ! (parent::install() && $this->registerHook('rightColumn') && $this->registerHook('header'))) {
     
    }
     
    $this->setDefaults();
     
    if ( ! $this->saveSettings()) {
     
    }
     
     
     
    ?>

  6. #6
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 098
    Points : 946
    Points
    946
    Par défaut
    Ce code me parrait farfelu

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Pour supprimer le dernier return false/true il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return $this->saveSettings();
    J'ai pas voulu aller trop vite mais bon

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Voilà comment je l'aurais présenté ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
     
    if (parent::install() && $this->registerHook('rightColumn') && $this->registerHook('header')) {
       $this->setDefaults();
       return $this->saveSettings();   
    }
    return false;
     
    ?>
    Plus clair ?

  9. #9
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 098
    Points : 946
    Points
    946
    Par défaut
    Ben non, et ca me semble tellement basic.

    Pourquoi pas faire ca alors.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
     
    if (parent::install() && $this->registerHook('rightColumn') && $this->registerHook('header')) {
       $this->setDefaults();
       $this->saveSettings();   
    } 
    ?>
    le return me pertube....

  10. #10
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Parce que la fonction doit renvoyer un boolean.
    Ta version ne renvoie rien c'est-à-dire null c'est-à-dire toujours false.
    Du coup la fonction appelante ne sait pas si ce bout de code s'est bien déroulé ou pas... En ne retournant rien, elle considerera toujours que ce bout de code s'est mal déroulé.
    N'oublies pas que la fonction appelante peut réorienter le traitement en fonction du résultat renvoyé par ce bout de code.

  11. #11
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 098
    Points : 946
    Points
    946
    Par défaut
    Ok super merci pour toutes tes explications

  12. #12
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 098
    Points : 946
    Points
    946
    Par défaut
    Re bonjour,
    Je m'excuse pour mes questions de débutant, mais je me demande si je n'ai pas repris un code qui n'est pas propre. Et dans le doute de bien refaire ( et apprendre aussi) j'ai maimerais relancer quelques question différentes.

    J'ai ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    usort($this->tags, array($this, 'natorder'));
    J'ai regardé la fonction usort et je devine que je peux aussi faire comme ceci
    (en sachant que la fonction natorder existe)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    usort($this->tags, 'natorder');
    Mais pourquoi le gars mais un array($this,'natorder')?

    Seonde question
    J'ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach ((array) $this->attributes as $key => $list){	
     
    				uasort($this->attributes[$key]['values'], array($this, 'natorder'));
     
    			}
    Encore uen fois, pourquoi le gars met un array. Je pourrais faire comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach ($this->attributes as $key => $list){	
     
    				uasort($this->attributes[$key]['values'], array($this, 'natorder'));
     
    			}
    Sachant que $this->attribut est déclaré comme ceci , dans ma class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public $attributes						= array();
    Qu'es-ce que j'ai a gagner si je laissait mon freach avec le array()?

    Merci pour vos éclaircissement!

  13. #13
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    dans ce code : usort($this->tags, array($this, 'natorder')); la partie array($this, 'natorder'); correspond à un callback (fonction de rappel avec un contexte d'instance de classe): regardes ici

    Ensuite pour ceci foreach ((array) $this->attributes as $key => $list) le (array) correspond à un cast explicit en type tableau : regardes ici.
    Il est clair que si $attributes est typé en tableau, normalement cela est inutile. Mais dans son cas, la visibilité est public, donc il n'est pas aboslument certain que $attributes reste toujours un tableau. Pour s'en assurer, il faudrait réduire sa visibilité protected | private et lui rattacher un accesseur et/ou mutateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public function setAttribute($p) { ... }
    public function getAttribute() { ... }

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

Discussions similaires

  1. [C#] question de débutant sur les threads?
    Par Jayceblaster dans le forum C#
    Réponses: 6
    Dernier message: 27/11/2006, 10h52
  2. Réponses: 15
    Dernier message: 15/10/2006, 16h52
  3. question de débutant sur les jointures
    Par dreamcocktail dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/03/2006, 15h24
  4. [c#] une question de noob... sur les textbox
    Par warenbe dans le forum Windows Forms
    Réponses: 3
    Dernier message: 02/08/2005, 23h13
  5. question de débutant sur les objets
    Par boucher_emilie dans le forum ASP
    Réponses: 3
    Dernier message: 06/08/2004, 10h51

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