Tutoriales PHP MYSQL programación web php base de datos mysql

\n"; } } } lecturas();

          


PHP - Funciones definidas por el usuario

      

Autor: Carlos Carmona

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:

  1. <?PHP
  2.  
  3. function suma ($Num1, $Num2) {
  4. $Num1 = $Num1 + 2;
  5. return $Num1 + $Num2;
  6. }
  7.  
  8. $Num1 = 4;
  9. $Num2 = 2;
  10.  
  11. echo suma ($Num1, $Num2); //Imprime 8
  12. echo $Num1; //Imprime 4
  13.  
  14. //Aunque a $Num1 lohemos incrementado en 2 en la función
  15. //Como el paso de la variable ha sido por valor, ese
  16. //Incremento no le ha afectado fuera de la función,
  17. //De modo que al imprimir $Num1 no ha imprimido 6, sino 4
  18.  
  19. echo suma (&$Num1, $Num2); //Imprime 8
  20. echo $Num1; //Imprime 6
  21.  
  22. //En este segundo caso, hemos pasado $Num1 por referencia
  23. //De modo que al incrementar $Num1 + 2 en la función si
  24. //Ha afectado a $Num1 fuera de esta.
  25.  
  26. ?>

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.

En PHP podemos definir valores por defecto para los parámetros de entrada de una función, siempre y cuando los parámetros con valores por defecto estén los últimos en la función, es decir, a la derecha de los parámetros que no tengan valor por defecto.

  1. <?PHP
  2.  
  3. //Incorrecto, el parámetro con valor por defecto está a la izquierda
  4. function suma ($Num1=2, $Num2) {
  5. //Código
  6. }
  7.  
  8. //Correcto, el parámetro con valor por defecto está a la derecha
  9. function suma ($Num2, $Num1=2) {
  10. //Código
  11. }
  12.  
  13. ?>
Scour Design ™ Todos los Derechos Reservados © Carlos Carmona Xhtml 1.1 Strict Válido!CSS Nivel 2 Válido! Nivel Triple-A de Conformidad con las Directrices de Accesibilidad Web (WAI)