CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[PHP] Ambiguïté avec les références

vava740
vava740
Niveau 10
13 septembre 2013 à 10:45:03

Bonjour. :)

En travaillant avec des références j'ai été confronté à un problème qui m'a paru suspect, dont voici un exemple simplifié [ https://wall.deblan.org/x1891/php/1/ ].

Et encore mieux [ https://wall.deblan.org/x1892/php/1/ ].

Es-ce normal que durant l'existence de ma variable locale $registry la propriété statique soit également modifiée en passant son offset [a][b] d'un tableau à une référence de tableau ? :doute:

deepblue
deepblue
Niveau 16
13 septembre 2013 à 19:32:57

Oui ça me paraît logique. Dans la mesure où dès le départ tu fais des références partout, elles sont conservées tout le long de tes associations (sauf que tu unset $registry, ici tu supprimes uniquement la référence).

vava740
vava740
Niveau 10
13 septembre 2013 à 22:15:10

Je n'ai pas trop compris... ma variable locale $registry est une référence, mais self::$registry['a']['b'] n'en est pas une normalement. Or dans le var_dump self::$registry['a']['b'] est une référence de tableau (et non le tableau direct) durant l'existence de ma variable locale.

Un peu comme si j'avais fait self::$registry['a']['b'] =& self::$registry['a']['b'] (il passe de array à &array dans le var_dump) ?

deepblue
deepblue
Niveau 16
13 septembre 2013 à 22:59:15

https://wall.deblan.org/x1898/php/1/

vava740
vava740
Niveau 10
14 septembre 2013 à 08:24:33

Merci, c'est un peu plus clair maintenant, mais ce qui m'étonne c'est que dans ton exemple tu n'as jamais de &array dans tes var_dump, alors que si j'exécute ton exemple, voici le var_dump juste après le unset :

array(1) { ["a"] => array(1) { ["b"] => &array(0) { } } }

Testé sous PHP 5.5.3 au passage ; ce qui me chafouine c'est que l'offset [b] est une référence et pas le tableau original *juste pendant l'existence de ma référence locale*.

Voilà un autre exemple peut-être plus flagrant [ https://wall.deblan.org/x189a/php/1/ ].

Sans même parler d'unset et d'affectation de référence, ici on voit clairement que tant que ma variable locale est une référence vers le tableau, celui-ci est flaggé avec un & dans le var_dump.

Après réflexion, le & du var_dump veut dire qu'au moins une variable fait référence à ce tableau, mais pas que le tableau est lui-même une référence vers une autre variable (c'est ce que je n'avais pas saisi).

C'est d'autant plus clair en voyant ça [ http://php.net/manual/en/internals2.variables.intro.php ], avec le flag is_ref__gc (utilisé pour afficher le & du var_dump ou non).

Bref, problème résolu. :content:

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment