[PHP] Signification de syntaxe php

Résolu
djflexlive Messages postés 557 Date d'inscription   Statut Membre Dernière intervention   -  
 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


A voir également:

6 réponses

djflexlive Messages postés 557 Date d'inscription   Statut Membre Dernière intervention   95
 
Et egalement celle ci :

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

&$this pourquoi le & devant ?
0
Utilisateur anonyme
 
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
Utilisateur anonyme
 
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
djflexlive Messages postés 557 Date d'inscription   Statut Membre Dernière intervention   95
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
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
djflexlive Messages postés 557 Date d'inscription   Statut Membre Dernière intervention   95
 
Thanks !! Merci à toi pour les liens ;)
0
Utilisateur anonyme
 
De rien :)
0