Parámetros
por valor y por referencia en php.
Hay dos maneras de pasar parámetros a una función,
por valor o por referencia. Para explicar esto y que se comprenda en
profundidad, voy a meterme a hablar del hardware...
Cuando se declara una variable, el sistema
operativo reserva un espacio de memoria en la memoria RAM.
Cuando
pasamos una variable a una función por valor, el sistema operativo
reserva otro espacio de memoria distinto, de modo que los cambios que sufra la
variable en la función no afectarán a la variable de fuera de la función,
aunque tengan el mismo nombre, ya que son variables distintas con espacios de
memoria distintos. Por el contrario, cuando pasamos una variable a una función
por referencia, realmente no estamos pasando el valor de la variable,
sino la posición del espacio de memoria de esa variable (a esto se le llama puntero).
De acuerdo a esto, los cambios que sufra la variable dentro de la función
afectarán a la variable fuera de la función, aunque tengan distintos nombres,
ya que es la misma variable.
A todo esto
se le denomina Ámbito de las Variables.
En todos los ejemplos anteriores hemos pasado las
variables por valor, ya que es el modo por defecto en PHP; si
queremos pasar una variable por referencia, deberemos anteponer a la variable
el signo del ampersand (&).
Veamos un ejemplo de ambos sistemas de pasar
variables a una función:
CODIGO:
- <?php
- function suma ($Num1, $Num2) {
- $Num1 = $Num1 + 2;
- return $Num1 + $Num2;
- }
- $Num1 = 4;
- $Num2 = 2;
- echo suma ($Num1, $Num2); //Imprime 8
- echo $Num1; //Imprime 4
- //Aunque a $Num1 lo hemos incrementado en 2 en la función
- //Como el paso de la variable ha sido por valor, ese
- //Incremento no le ha afectado fuera de la función,
- //De modo que al imprimir $Num1 no ha imprimido 6, sino 4
- echo suma (&$Num1, $Num2); //Imprime 8
- echo $Num1; //Imprime 6
- //En este segundo caso, hemos pasado $Num1 por referencia
- //De modo que al incrementar $Num1 + 2 en la función si
- //Ha afectado a $Num1 fuera de esta.
- ?>
Si queremos que un parámetro de una función se pase
siempre por referencia, deberemos anteponer un ampersand (&) al
nombre del parámetro en la definición de la función.
Parámetros por referencia:
Cuando se pasan parámetros por referencia, le damos autorización a la
función (¿qué tal?, ¡verso sin mucho esfuerzo!) de cambiar permanentemente el
valor original de la variable.
Para pasar siempre un parámetro por referencia, basta con anteponer un
ampersand (&) al nombre del parámetro en la definición de la función de la
siguiente forma:
CODIGO:
<?php
$original
= "Esto es fuera de la función";
function
cambio_total(&$original)
{
$original
= "Esto es dentro de la función y fuera de la función";
echo $original;
}
echo
"Fuera de la función la variable es: ";
echo
$original."<BR>";
echo
"Dentro de la función, la variable es: ";
cambio_total($original);
echo
"<BR>Esto está fuera de la función de nuevo: ";
echo $original;
?>
Como se darán cuenta, la variable $original
cambia definitivamente de valor al entrar al cuerpo de la función, gracias a
que su parámetro (es decir la variable $original) se ha pasado
por referencia.
Fuente: www.scourdesign.com
http://www.aulafacil.com/php/curso/Lecc-22.htm
No hay comentarios:
Publicar un comentario