[PHP] Signification de syntaxe php

Résolu/Fermé
Messages postés
557
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
23 avril 2015
-
 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


6 réponses

Messages postés
557
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
23 avril 2015
95
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"])
Messages postés
557
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
23 avril 2015
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.

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.
Messages postés
557
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
23 avril 2015
95
Thanks !! Merci à toi pour les liens ;)
Utilisateur anonyme
De rien :)