2009-06-16 9 views
4

J'ai écrit et joué avec beaucoup de fonctions PHP et de variables où l'auteur original a écrit le code original et j'ai dû continuer à développer le produit. Joomla Components/Modules/Plugins et je suis toujours venu avec cette question:Comment le symbole '&' dans PHP affecte-t-il le résultat?

Comment le symbole '&' attaché à une fonction ou une variable affecte le résultat?

Par exemple:

$variable1 =& $variable2; 

OU

function &usethisfunction() { 
} 

OU

function usethisfunction(&thisvariable) { 
{ 

J'ai essayé la recherche dans le manuel de PHP et d'autres sources connexes, mais ne peut pas trouver tout ce qui précisément les adresses ma question.

+0

Le deuxième exemple est pas valide du code PHP – Casebash

Répondre

7

Ils sont connus comme references.

Voici un exemple de code PHP "régulier":

function alterMe($var) { 
    $var = 'hello'; 
} 

$test = 'hi'; 
alterMe($test); 
print $test; // prints hi 

$a = 'hi'; 
$b = $a; 
$a = 'hello'; 
print $b; // prints hi 

Et c'est ce que vous pouvez réaliser en utilisant les références:

function alterMe(&$var) { 
    $var = 'hello'; 
} 

$test = 'hi'; 
alterMe($test); 
print $test; // prints hello 

$a = 'hi'; 
$b &= $a; 
$a = 'hello'; 
print $b; // prints hello 

Les détails Nitty Gritty sont dans la documentation. Essentiellement, cependant:

Les références en PHP sont un moyen d'accéder au même contenu variable par des noms différents. Ils ne sont pas comme les pointeurs C; à la place, ils sont des alias de table de symboles. Notez qu'en PHP, le nom de la variable et le contenu de la variable sont différents, donc le même contenu peut avoir des noms différents. L'analogie la plus proche est avec les noms de fichiers et les fichiers Unix - les noms de variables sont des entrées de répertoire, tandis que le contenu variable est le fichier lui-même. Les références peuvent être assimilées à une liaison dans un système de fichiers Unix.

1

C'est une référence. Il permet à 2 noms de variables de pointer vers le même contenu.

2
<?php 

$a = "hello"; # $a points to a slot in memory that stores "hello" 
$b = $a;  # $b holds what $a holds 

$a = "world"; 
echo $b;  # prints "hello" 

Maintenant, si l'on ajoute &

$a = "hello"; # $a points to a slot in memory that stores "hello" 
$b = &$a; # $b points to the same address in memory as $a 

$a = "world"; 

# prints "world" because it points to the same address in memory as $a. 
# Basically it's 2 different variables pointing to the same address in memory 
echo $b;   
?>