• [^] # Re: Inquiétudes

    Posté par (site web personnel) . En réponse à la dépêche IP-formation : la formation administrateur Linux menacée. Évalué à 4.

    D'ailleurs pour être exact même en PHP 5 les objets ne sont pas passés par référence. On transmet un identifiant qui fait référence à un objet. La différence c'est que chaque variable a sa propre copie de cet identifiant en tant que valeur. Redéfinir une variable n'impacte pas les autres qui ont aussi cet objet en valeur.


    function modifie($a) { $a = 3 ; }
    $b = new StdClass() ;
    $b->hello = 2 ;
    modifie($b) ;
    echo $b ; // ... c'est un objet qu'on tente d'afficher, pas "3"

    Alors que pour une vraie référence :

    function modifie(&$a) { $a = 3 ; }
    $b = new StdClass() ;
    $b->hello = 2 ;
    modifie($b) ;
    echo $b ; // ... c'est 3 qu'on affiche

    > Pourtant, la question laisse penser qu'il existe une différence implicite (a la java ou les scalaires diffèrent des objets).

    Il y en a une.

    function modifie($a) { $a->hello = 4 ; }
    $b = new StdClass() ;
    $b->hello = 2 ;
    modifie($b) ;
    echo $b->hello ; // donne 2 en PHP 4 (tout est passé par copie) et 4 en PHP 5 (les objets ont un traitement spécial, différent des scalaires)


    (codes non testés donc probablement bourrés d'erreurs, mais le principe est là).