<!DOCTYPE html>
<html lang="en">
<head>
  <title>Cours dev bak</title>
</head>
<body>
    <h1>Cours dev back session 3 : rappels opérateurs</h1>
    <a href="index.php">retour aux rapppels sur les variables</a>
    <hr>
    <h2> opérateurs arithmétiques </h2>
    <?php
        //les opérateurs arithmétiques, permettent de faire des opérations
        $a=2;
        $b=3;
        // on peut utiliser indifféremment print ou echo
        echo "somme de a et b = ";
        print($a + $b);
        echo "<br/> devision de b par a (3/2) = ";
        print($b / $a);
        echo "<br/> module de b par a = reste de la division de b/a (3/2) = ";
        print($b % $a);
        // pour changer le signe d'une valeur l'opérateur unaire :
        echo "<br/> a en négatif = ";
        print(-$a);
    ?>
    <h2> opérateur concatenation . et sur les chaines</h2>
    Permet de coller entre elles des chaines ou des chaines à autre chose.
    <?php
        // quand on écrite le code la fin d'un instruction se termine par ;
        // je peux sauter autant de lignes que je veux avant ce ;
        echo  "<br/>Bonjour "
             ."tout le monde ! a vaut "
             . $a 
             . " aujorud'hui";
    ?>
    Petit apparté sur les séparateur de chaines : " et '
    <?php
        // ici $a est affiché tel quel
        echo '<br/>ma mariable $a vaut '.$a;
        // ici $a est "interprêté"
        echo "<br/>ma mariable $a vaut ".$a;
        // on "echappe" $ si on veut qu'il s'affiche entre doule quotte
        echo "<br/>ma mariable \$a vaut ".$a;
        // ou sans concaténation
        echo "<br/>ma mariable \$a vaut $a";
        echo "<br/>en français on  beaucoup d'apostrophe donc j'utilise \" \" ";
        echo "<br/>si je veux un 'antislash' je le préfixe par un  \\ ";
        echo '<br/>en SQL on beaucoup de guillements donc j\'utilise \' \' ';
    ?>
    <h2> opérateurs de comparaisons / opérateurs logiques</h2>
    <br> ==, !=, >=, <= , >, < ... pour les comparaisons simples (sans vérfication de type)
    <br> ===, !== pour les comparaisons avancées (avecx vérfication de type)
    <br> ! opérateur unaire pour inversion de valeur vrai => faux, faux => vrai
    <?php 
        echo "<br>";
        $a = true;
        var_dump($a);
        echo "<br>";
        $b = !$a;
        var_dump($b);
    ?>
    <br/> pour le chainage de conditions on utilise && pour "et", || pour "ou"
    <br/> le caractère | s'appelle "pipe" en anglais et peut s'obtenir avec &lt;Alt Gr&gt;+6 sur un clavier pc, et &lt;Alt + Shift&gt; + L sous mac
    <?php
        // deux comparaisons avec et
        echo "<br/> a = 2";
        $a=2;
        $vrai = ( ($a > 1) && ($a < 6) );
        echo " ( ($a > 1) && ($a < 6) ) est : ";
        var_dump($vrai);
        // deux comparaisons avec et
        echo "<br/> a = 2";
        $a=-2;
        $vrai = ( $a > 1 || $a < -1 );
        echo " ( $a > 1 || $a < -1 ) est : ";
        var_dump($vrai);
    ?>
    <h2>priorité des opérateurs</h2>
    Comme en mathématique les opérateurs ont une précédence (priority) cf : 
    <a href="https://www.php.net/manual/fr/language.operators.precedence.php">référence</a>

    <h2>opérateur ternaire le mini if then else</h2>
    Deux solutions pour réaliser le pseudo code suivant
    <pre>
        variable a, b : entiers
        a=2;
        b=0;
        Si a est supérieur à 1 alors
          b = a*a;
        Sinon 
         b = -a;
        Fin si
    </pre>
    <?php 
        $a=2;
        $b=0;
        if($a > 1) 
        {
            $b = $a*$a;
        }
        else 
        {
            $b = -$a;
        }
        echo "<br/> à l'issue de l'exécutoin du premier b vaut ".$b;
        $a = 2;
        $b = ( $a>1 ? $a*$a : -$a );
        echo "<br/> à l'issue de l'exécutoin du premier b vaut ".$b;
    ?>
    <br/> L'opérateur ternaire <b>?:</b> pertmet de faire une affactation conditionnelle qui vaut :
    <ul>
        <li>ce qui est avant le ":" si la condition avant le "?"" est vraie,</li>
        <li>ce qui est après le ":" si la condition avant le "?"" est fausse</li>
    </ul>
</body>
</html>