[PHP] Signification de syntaxe php

Résolu
Bonjour,

Je suis en train de regarder le code d'un site web et je ne comprends pas cela.

$album->flags &= ~ALBUM_FLAG_ACTIVE;

&= ~ veut dire quoi concretement ?

Merci

6 réponses

  1. Et egalement celle ci :

    $httpClient = &$this->_initHttpClient($config["encoder"]["start_url"]);

    &$this pourquoi le & devant ?
    0
    1. Bonjour

      1 - Ce ~ est l'opérateur d'inversion logique bit à bit.
      Si ALBUM_FLAG_ACTIVE vaut 4 par exemple (je vais raisonner sur des mots de 8 bits) ça s'écrit 0000 0100
      donc ~ALBUM_FLAG_ACTIVE vaut 1111 1011 (ou 251=255-4)

      Maintenant , &=
      $machin &=TRUC, c'est une notation raccourcie pour $machin = $machin & TRUC.
      L'opération &, c'est le ET bit à bit
      Si on met toutes les opérations les unes à la suite des autres, ça donne (toujours pour ALBUM_FLAG_ACTIVE = 4) :
                      ~ALBUM_FLAG_ACTIVE : 0000 0100
                      ~ALBUM_FLAG_ACTIVE : 1111 1011
                           $album->flags : xxxx xxxx
      $album->flags & ~ALBUM_FLAG_ACTIVE : xxxx x0xx
      

      Le bilan de l'opération est de forcer à 0 certains bits de $album->flags sans modifier les autres. Le ou les bits forcés sont ceux qui étaient à 1 dans ALBUM_FLAG_ACTIVE.
      Pour forcer ces mêmes bits à 1, on utilise un OU bit à bit (|) sans inverser ALBUM_FLAG_ACTIVE :
      $album->flags |= ALBUM_FLAG_ACTIVE;
      C'est une méthode très classique pour (entre autres) stocker plusieurs infos logiques dans une seule variable.
      0
      1. 2 -$httpClient = &$this->_initHttpClient($config["encoder"]["start_url"]);

        N'oublie pas de lire le manuel PHP, c'est encore là qu'il y a les meilleures explications :
        https://www.php.net/manual/fr/language.references.whatdo.php

        Le & représente une référence. En pratique, ça veut dire que maintenant, $httpClient et $this->_initHttpClient($config["encoder"]["start_url"]) représentent la même chose. Tu n'as pas simplement recopié la valeur d'une variable dans une autre, elles sont devenues la même variable. Si tu modifies la valeur de $httpClient, ça va aussi modifier la valeur de $this->_initHttpClient($config["encoder"]["start_url"])
        0
        1. Ok je te remercies... Jamais utilisé cela dans mes anciens dév... Je sens que je vais devoir mettre la main à la patte !

          Egalement et je n'ai pas trouvé de vrais "tutos" à ce sujet, as tu un lien intéressant qui détailles les "abréviations" possibles en php ?

          Du genre " if ( A == B ) $vari = 'ok'; else $vari = 'nok'; " > $vari = (A == B) ? 'ok' : 'nok';

          ?

          Merci à toi.
          0
          1. Bonjour

            Pas besoin de tuto, il y a le manuel. Le chapitre sur la "référence du langage" n'est pas si long que ça,
            https://www.php.net/manual/fr/langref.php
            Si tu ne connaissais pas ces manières d'écrire (qui ne sont ni des abréviation, ni des astuces, simplement la syntaxe PHP) tu y apprendras plein de choses intéressantes. Et ça n'est pas grave si tu ne retiens pas tout par coeur : l'essentiel c'est que tu aies vu une fois que ça existait, quand tu en auras besoin ça te rappellera quelque chose et tu sauras où le retrouver.
            0
            1. Thanks !! Merci à toi pour les liens ;)
              0
              1. De rien :)
                0