2010-01-17 29 views
15

considerar:¿Qué significa = & mean en PHP?

$smarty =& SESmarty::getInstance(); 

Cuál es el & para?

+2

Si necesita algo como esto en el futuro busque "operadores" en las referencias de ayuda de PHP, o un buen motor de búsqueda. –

+1

También debe buscar algo llamado "Singleton". – cwallenpoole

Respuesta

24

Pasa por referencia. Lo que significa que no creará una copia del valor pasado.

Ver: http://php.net/manual/en/language.references.php (Véase la respuesta de Adán)

Por lo general, si pasa algo como esto:

$a = 5; 
$b = $a; 
$b = 3; 

echo $a; // 5 
echo $b; // 3 

La variable original ($a) no se modificará si cambia la segunda variable ($b). Si pasa por referencia:

$a = 5; 
$b =& $a; 
$b = 3; 

echo $a; // 3 
echo $b; // 3 

También se cambió el original.

Lo cual es inútil al pasar por los objetos, ya que se pasarán por referencia de manera predeterminada.

+5

Los objetos PHP5 * no * se pasan por referencia de forma predeterminada: más bien, un identificador de objeto se pasa por valor (similar a la semántica de 'referencia' de Java); ver el manual para más detalles: http://www.php.net/manual/en/language.oop5.references.php – Christoph

+0

Gracias, me parece un poco inútil en este momento – JasonDavis

+0

Realmente no tiene sentido. La razón principal por la que las personas los usaban era para no requerir una función para devolver una variable, sino que simplemente tenían que modificar la variable. –

5

En PHP   4, se asocia (torpemente) dos variables.

$j = 'original'; 
$i =& $j; 
$i = 'modified'; 
echo $j; // The output is 'modified' 

Del mismo modo ...

$j = 'original'; 
$i =& $j; 
$j = 'modified'; 
echo $i; // The output is 'modified' 

se hizo Algo de esto un poco menos desagradable cuando se trata de objetos en PHP 5, pero creo que el corazón de la misma es el mismo, por lo que estos ejemplos deben aún ser valido

1

References se usan para alias de variables y fueron necesarios para usar el viejo sistema de objetos de manera eficiente.

En PHP   4, los objetos se comportan como cualquier otro tipo de valor, es decir, la asignación crearía una copia del objeto. Si quería evitar esto, tenía que usar una referencia como en su código de ejemplo.

Con PHP 5, las variables de objeto ya no contienen el objeto en sí, pero un identificador de objeto (AKA) y la asignación solo copiarán el identificador. El uso de una referencia ya no es necesario.