[PHP] Signification de syntaxe php
Résolu
djflexlive
Messages postés
577
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
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
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
-
Et egalement celle ci :
$httpClient = &$this->_initHttpClient($config["encoder"]["start_url"]);
&$this pourquoi le & devant ? -
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. -
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"]) -
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. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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. -