IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Comprends pas le =& [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 535
    Par défaut Comprends pas le =&
    Bonjour,

    Je ne comprends pas la ligne de code suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $objet1->objectref =& $unautreobjet;
    Quelqu'un pourrait m'expliquer svp ?

    Papy !

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 358
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 358
    Billets dans le blog
    17
    Par défaut
    Salut !
    C'est une affectation de référence.
    De la doc sur les références : http://fr.php.net/manual/fr/language...es.whatare.php

    Pour le chemin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
        $a = 'Bonjour Papy214 !' ;
        $b =& $a ;
     
        $a = 'Au revoir Papy214 !' ;
     
        echo $b ;
    ?>
    Qu'affichera ce petit script ?

  3. #3
    FoxLeRenard
    Invité(e)
    Par défaut
    Au revoir Papy214 !

    Salut l'Ami, la je fais le malin ...

    Par contre ton lien me fait découvrir que dans une fonction il faut passer par $Global ?? ben ça va devenir compliqué a gérer
    http://fr.php.net/manual/fr/language...ces.whatdo.php

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 358
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 358
    Billets dans le blog
    17
    Par défaut
    Par contre ton lien me fait découvrir que dans une fonction il faut passer par $Global ??
    Oui enfin c'est qd même un cas très particulier, seulement si tu veux utiliser une référence visible de l'extérieur et non transmise en paramètre. Bah de toutes façons utiliser global dans une fonction c'est mal

    Avertissement

    Si vous assignez une référence à une variable définie en tant que global dans une fonction, la référence sera visible uniquement à l'intérieure de la fonction. Vous pouvez éviter cela en utilisant le tableau $GLOBALS.

  5. #5
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation:
    Avertissement
    Si vous assignez une référence à une variable définie en tant que global dans une fonction, la référence sera visible uniquement à l'intérieure de la fonction. Vous pouvez éviter cela en utilisant le tableau $GLOBALS.
    Et si une fonction retourne une référence à une variable qu'elle a elle-même définie, ça donne quoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function bizarre() {
        $localVar = 'foobar';
        $ref =& $localVar;
        return $ref;
    }
     
    $bizarrerie = bizarre();
    Après l'appel de la fonction, $localVar n'existe plus, mais il existe une référence vers cette variable. Un truc qui pourrait s'approcher d'une fermeture.
    Aucune idée de ce à quoi ça pourrait servir, je me demande juste quel effet ça donnerait.

    Pour en revenir à la question principale, les références sont de moins en moins explicitées en php5 car implicites pour les objets et les tableaux.

  6. #6
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Sur les tableaux, pas toujours.

    Dans un foreach, on est obligé d'assigner une référence à la clef ou l'élément pour modification.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach( $t as &$v )
       $v++;

  7. #7
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Le doute s'étant sournoisement insinué en moi, j'ai voulu vérifier les passage des tableaux aux fonctions.
    Il semble que ce soit encore par valeur par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
    $arr = array('a', 'b', 'c', 'd');
    print_r ($arr);
     
    modifValue($arr);
    print_r($arr);
     
    modifRef($arr);
    print_r($arr);
     
    function modifValue($tab) {
    	$tab[1] = 'modif';
    }
     
    function modifRef(&$tab) {
    	$tab[1] = 'modif';
    }
    Je vais réviser un peu...

  8. #8
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 535
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Salut !

    Qu'affichera ce petit script ?
    Avant de tester, j'avais dis:
    'Au revoir Papy214 !'

    Après test, j'ai vu que j'avais bon

    Donc, c'est l'équivalent d'un pointeur si j'ai bien compris.

    Merci !

  9. #9
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 535
    Par défaut
    Citation Envoyé par jml94 Voir le message
    Pour en revenir à la question principale, les références sont de moins en moins explicitées en php5 car implicites pour les objets et les tableaux.
    En fait, je suis "tombé" sur ce code dans le moteur de template TinyButStrong, pour utiliser un objet dans le template. Ce code est peut-être ainsi pour rester compatible avec les anciennes versions de PHP.

    Tiens, ça m'amène à une autre question. Je programe aussi en delphi et dans ce langage, on peut compiler différents codes selon la version de delphi utilisée. C'est possible avec PHP ? (pas au niveau compilation évidemment mais éxécution du code).

  10. #10
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Tiens, ça m'amène à une autre question. Je programe aussi en delphi et dans ce langage, on peut compiler différents codes selon la version de delphi utilisée. C'est possible avec PHP ? (pas au niveau compilation évidemment mais éxécution du code).
    Il y a au moins la solution de spécifier la version utilisée dans le .htaccess.
    Tu peux aussi spécifier la version de php dans l'extension : .php4 ou .php5

  11. #11
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par jml94 Voir le message
    Il y a au moins la solution de spécifier la version utilisée dans le .htaccess.
    Tu peux aussi spécifier la version de php dans l'extension : .php4 ou .php5
    Ah génial, c' est un peut comme executer en tant que win98 pour XP !!
    Super je ne connaissais pas .. merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur Objet requis : 'this' --> Comprend pas!!
    Par Grozeil dans le forum ASP
    Réponses: 3
    Dernier message: 30/03/2005, 10h46
  2. [thread][methodologie]Quelque chose que je ne comprends pas!
    Par norkius dans le forum Général Java
    Réponses: 5
    Dernier message: 16/03/2005, 15h01
  3. sql ne comprend pas mon where!et me demande des parametres
    Par marie10 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 20/04/2004, 12h08
  4. [Rave] un message que je ne comprends pas
    Par Clotilde dans le forum Rave
    Réponses: 2
    Dernier message: 30/09/2003, 22h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo