2010-08-19 22 views
29

Duplicar posible: What do the "=&" and "&=" operators in PHP mean?¿Qué significa el operador PHP = & mean?

me encontré con el operador "= &" en el código siguiente, y no sé lo que significa. ¿Qué significa y qué hace?

El código donde lo leí:

function ContentParseRoute($segments) 
{ 
    $vars = array(); 

    //Get the active menu item 
    $menu =& JSite::getMenu(); 
    $item =& $menu->getActive(); 

    // Count route segments 
    $count = count($segments); 
     .... 
+3

http://stackoverflow.com/questions/1367454/what-do-operators-in-php-mean – muhmuhten

Respuesta

7

Es el operador de asignación referencial .

Esto significa que cuando modifica el LHS del operador más tarde en el código, modificará el RHS. Usted está señalando el LHS al mismo bloque de memoria que ocupa el RHS.

+4

LHS = Left Hand Side RHS = Lado derecho – Htbaa

+0

Esto es correcto (al menos que no dijo "estos son realmente dos operadores"). Sin embargo, la última frase es un poco engañosa. En '$ a = $ b;', '$ b', en la mayoría de los casos, también apunta al mismo bloque de memoria que' $ a'.La diferencia es que la variable se separará en la modificación, mientras que si está en un conjunto de referencia, lo hará. Puede ser más exacto decir 'Los símbolos en el LHS y el RHS son la misma variable" o algo por el estilo, y omita la referencia de "memoria". – Artefacto

+0

La respuesta aceptada parece implicar que cuando modifica el RHS, el LHS también se modifica. ¿Es correcto? –

52

Esto no es una tarea (=) por referencia (&).

Si fuera a decir:

$a = 42; 
$b =& $a; 

Estás realidad diciendo asignar $apor referencia a$b.

Lo que asignar por referencia hace es "atar" las dos variables juntas. Ahora, si tuviera que modificar $a más adelante, $b cambiaría con él.

Por ejemplo:

$a = 42; 
$b =& $a; 

//later 
echo $a; // 42 
echo $b; // 42 

$a = 13; 
echo $a; // 13 
echo $b; // 13 

EDIT:

Como Artefacto señala en los comentarios, $a =& $b es no lo mismo que $a = (&$b).

Esto se debe a que mientras el operador & significa hacer una referencia a partir de algo, el operador hace = asignar a paso valor, por lo que los medios de expresión $a = (&$b) hacer una referencia temporal para $b, a continuación, asignar el valor de ese temporal a $a, que no es asignación por referencia.

+9

-1 '$ b = (&$a);' es una sintaxis no válida. Sé que ese no es tu punto, pero '= &' es en realidad un único operador y se traduce en el código de operación 'ASSIGN_REF' Esta no es una observación interna irrelevante. Considere una función 'func' que retorna por referencia' $ a = func() '. Esta función devuelve una referencia, pero' $ a' no será una referencia porque el operador ' = 'rompe el conjunto de referencia y borra el indicador. Realmente tiene que hacer' $ a = & $ func() '.' & 'significa" hacer una referencia a partir de esto (por ejemplo 'array (& $ a)'), pero hacer una referencia no es suficiente para asignar por referencia. – Artefacto

+3

¿De verdad, ahora? No lo sabía, y nunca lo hice ke para mí antes (al menos aparentemente). Supongo que aprendes algo todos los días. :) Editaré mi respuesta para esta corrección. –

3

He aquí un ejemplo de ello en uso:

$array = array('apple', 'orange', 'banana'); 

// Without & 
foreach($array as $d) 
{ 
    $d = 'fruit'; 
} 

echo implode(', ', $array); // apple, orange, banana 

// With & 
foreach($array as &$d) 
{ 
    $d = 'fruit'; 
} 

echo implode(', ', $array); // fruit, fruit, fruit 

No es una explicación, pero un ejemplo de ser capaz de utilizar el operador & sin usarlo en una misión =&.

+1

Vea mis comentarios sobre las otras respuestas. No se confunda con el significado de '&'. Todos están relacionados con las referencias de alguna manera, pero no significan lo mismo. – Artefacto

Cuestiones relacionadas