2010-03-19 30 views
8

Tenir compte:Que signifie cette signature (&) en PHP?

public function & get($name, $default = null) 

Pourquoi &?

+0

double possible de [Référence - Que signifie ce symbole en PHP] (http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean -in-php) – Gordon

Répondre

10

Dans la syntaxe de PHP, cela signifie que la fonction renvoie une référence au lieu d'une valeur. Par exemple:

<?php 
    $foo = 'foo'; 

    function & get_foo_ref() 
    { 
     global $foo; 
     return $foo; 
    } 

    // Get the reference to variable $foo stored into $bar 
    $bar = & get_foo_ref(); 
    $bar = 'bar'; 

    echo $foo; // Outputs 'bar', since $bar references to $foo. 
?> 

Dans l'exemple ci-dessus, la suppression & de la déclaration de fonction rendrait la variable $foo contiennent encore « foo », puisque seule la valeur, et non la référence a été renvoyée par la fonction.

Cela a été utilisé plus souvent en PHP4, car il ne passait pas les objets par leur référence et les clonait à la place. Pour cette raison, les variables d'objet devaient être transmises par référence pour éviter le clonage indésirable. Ce n'est plus le cas en PHP5 et les références ne doivent pas être utilisées à cette fin. Cependant, les fonctions qui renvoient des références ne sont pas complètement inutiles non plus (ou mauvaises pratiques, lorsqu'elles ne sont pas utilisées pour remplacer des références d'objet). Par exemple, personnellement, je les ai utilisé lors de la création d'un script qui transmet un "chemin" à une fonction, qui renvoie une référence à une variable dans ce chemin, ce qui me permet de lui donner une valeur et de lire la valeur. En raison de la nature récursive de la fonction, renvoyer la référence était nécessaire.

Par rithiur

+0

+1 pour une explication approfondie pragmatique qui double aussi comme preuve que le système de rep de SO n'est pas tout à fait juste –

+1

'$ bar = & get_foo_ref(); ', ici et n'est pas nécessaire – user198729

+0

@ Manos Dilaverakis: Je pense que partager de bonnes choses ne serait jamais une faute. – Young

11

Cela signifie qu'il renvoie une référence au résultat par opposition à une copie de celui-ci.

Returning References in PHP

+0

+1 Me battre de 40 secondes. –

+0

Juste un sidenote, ce n'est presque jamais bénéfique. Les objets sont passés par référence. La seule chose que cela pourrait aider est de tableaux (donc ils ne sont pas copiés), mais le bénéfice est minime, si existant du tout. – ryeguy