[RESOLU] Question a propos de PHP

ppmtppmt Member
novembre 2015 modifié dans Entraide
Salut,

Je sais que strictement c'est un peu hors sujet mais comme c'est lie a un plugin...

Je suis en train de jouer avec le plugin PlxMyShop et j'aurais une question a propos d'une syntaxe
[== PHP ==]
($_POST['methodpayment']=="cheque"?$this->getlang('L_WAITING'):$this->getlang('L_ONGOING'))

de ce que j'ai compris ca teste $_POST et retour L_WAITING si c'est egal a cheque sinon L_ONGOING

Ou puis je trouver de la doc sur cette maniere de tester? J'ai fait du google dans tous les sens et ca ne mene a rien.

Merci d'avance

Réponses

  • C'est un test très classique mais c'est la syntaxe qui a fait que tu ne pouvais pas en trouver d'autres exemples sur le net.


    C'est un bon vieux IF, tu peux faire un Google sur "php if" et tu verras rapidement des choses comme :

    IF($_POST=="cheque") {
    $this->getlang('L_WAITING');
    }ELSE{
    $this->getlang('L_ONGOING');
    }


    ce qui est une représentation syntaxique différente de ce que ta ligne disait.
  • pour avoir plus de chance de tomber sur la documentation pouvant t'aider, il aurait fallu que tu eusses connu le nom de cette chose qui est "opérateur ternaire"
    http://php.net/manual/fr/language.operators.comparison.php#language.operators.comparison.ternary

    mais il est plus utile de connaitre son fonctionnement plutôt que son nom donc la plupart des personnes qui tombent sur cette partie de la documentation le font quand c'est trop tard puisqu'elles connaissent déjà le fonctionnement. ]:D
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    Bonsoir,

    En principe, on affecte le résultat de l'opération ternaire à une variable, sinon c'est un truc inutile. Donc, on lit en général :
    [== PHP ==]
    <?php
    $res = ($_POST['methodpayment'] == 'cheque') ? $this->getlang('L_WAITING') : $this->getlang('L_ONGOING');
    ?>
    
    Les espaces autour des opérateurs ne sont pas obligatoires mais évitent de lire du "code spaghetti".

    A+
  • En effet, j'avais repris paresseusement la phrase tronquée offerte dans la question. Pour que mon exemple serve à quelque chose, il doit plutôt avoir l'air de:

    IF($_POST=="cheque") {
    $resultat = $this->getlang('L_WAITING');
    }ELSE{
    $resultat = $this->getlang('L_ONGOING');
    }
  • Merci Messieurs pour vos reponses....Comme j'ai besoin de 3 choix maintenant, je vais donc retomber dans le classique (if elsif)

    Je ne connaissais pas ce terme ternaire non plus.
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    pour avoir plus de chance de tomber sur la documentation pouvant t'aider, il aurait fallu que tu eusses connu le nom de cette chose qui est "instruction switch"
    http://php.net/manual/fr/control-structures.switch.php
    Pour répondre à votre besoin , je vous préconise d'envisager 4 choix plutôt que 3 qui pourrait entrainer une confusion avec l'opérateur ternaire :
    [== PHP ==]
    <?php
    switch ($_POST['methodpayment']) {
       case 'cheque' :
          echo 'Chèque en bois';
         break; 
      case 'cash':
         echo 'faux-billet';
        break;
      case 'virement':
         echo 'Cool !'
        break;
      case 'rien':
         echo 'ardoise';
         break;
       default:
           echo 'Espérons';
    }
    ?>
    

    A priori l'execution d'un switch est plus rapide que l'empilage correspondant de elseif.
  • Merci bazooka07
Connectez-vous ou Inscrivez-vous pour répondre.