viernes, 12 de septiembre de 2014

PHP (03) Funciones (02) Paso de argumentos a funciones

Vamos a aprender a pasar datos a una función, estos pueden ser de muchos tipos, ya sean variables, strings, arrays, números, booleanos... en el anterior articulo hemos visto como se pasaba una matriz completa, pero ahora vamos a ver un ejemplo mucho más sencillo, vamos a empezar enviando una cadena de texto como en el siguiente ejemplo:
<?php
 mostrar("Esto es una prueba");

 function mostrar($argumento)
 {
  echo $argumento;
 }
?>

En este ejemplo vemos como se llama a la función mostrar pasándole como argumento la cadena "Esto es una prueba" que recoge la función y muestra en el echo.
Del mismo modo podemos pasarle dos argumentos, siempre que la función pueda recibirlos:
<?php
 mostrar("Esto es una prueba", " con dos argumentos");

 function mostrar($argumento, $argumento2)
 {
  echo $argumento;
  echo $argumento2;
 }
?>

En este ejemplo hemos pasado dos argumentos separados por comas, ya que la función los recoge y luego los muestra en su código interno.
Algo que es muy sencillo ¿verdad?

De matrices a funciones

Ahora vamos a aprender a pasar una matriz a un función, si has entendido los ejemplos anteriores veras que no es nada difícil.
En el siguiente ejemplo vamos a calcular  el precio medio de la gasolina durante un año, para ello vamos a generar un script donde hay un array con los precios, y una función que se dedique a calcularlo como vamos a ver a continuación:
<?php
  $gasolina = array(1.11, 1.17, 1.25, 1.33, 1.35, 1.38, 1.40, 1.42, 1.44, 1.45, 1.43, 1.44);

 precioMedio($gasolina);

 function precioMedio($matriz)
 {
  $total=0;
  $contador=0;
  $media=0;
  foreach ($matriz as $valor) {
   $total += $valor;
   $contador ++;
  }

  if(count($matriz)>0){
   $media = $total/$contador;
   echo 'El valor medio de la gasolina es de: ' . $media;
  } else {
   echo 'No hay datos para hacer el cáculo';
  }
 }
?>

Analicemos el ejemplo:
  • Lo primero  que vemos es la declaración de un array $gasolina, como ya conocemos.
  • Seguidamente hacemos la llamada a la función, introduciendo el array como parámetro.
  • Declaramos la función que tiene un parámetro $matriz, que es como se llamará a los datos en todo el ámbito de la función.
  • Declaramos la variables que vamos a necesitar para hacer nuestra operación iniciándolas a cero. Esto se hace aquí y no fuera de la función ya que estas variables solo van a funcionar en este ámbito.
  • A continuación recorremos nuestro array ahora llamado $matriz, con un bucle foreach, en el cual vamos aumentando las variables $total y $contador.
  • Una vez que ha terminado de recorrer la matriz, vemos una estructura de control ifelse, la cual tiene como función controlar que el array no sea nulo, ya que pone como condición que $matriz tenga más de cero elementos. En ese caso hace la media y muestra en pantalla.
  • De no cumplir la condición del if, nos informa de que no hay datos.
  • Estas estructuras de control, se consideran una buena practica de programación ya que evitan que el programa pueda mostrar resultados extraños, o incluso se detenga por algún error y aunque no es el tema que nos trata veremos alguna de ellas en nuestros ejemplos que cada vez serán mas complejos.

Pasando valores por referencia

Cuando pasamos un valor a una función, lo que estamos pasando es una copia de ese objeto, no el objeto en si, por lo que el valor original del objeto no se modifica, como vemos en el siguiente ejemplo para calcular un cuadrado:
<?php
 $valor =3;
 cuadrado($valor);

 function cuadrado($numero)
 {
  $numero *= $numero;
  echo '<p>Numero: ' . $numero . '</p>';
 }
 
 echo '<p>Valor: ' . $valor . '</p>';
?>

Podríamos esperar que  nos diera como resultado 9 y 9 ya que $numero se ha convertido en $valor, pero el resultado que nos da es:
Numero: 9
Valor: 3

Para que los cambios ejercidos en una función afecten al objeto que se le envía como parámetro, se debe de hacer por referencia, es decir introduciendo el propio objeto.
Para hacer esto, tan solo hay que poner & delante del argumento de la función, veamoslo:
<?php
 $valor =3;
 cuadrado($valor);

 function cuadrado(&$numero)
 {
  $numero *= $numero;
  echo '<p>Numero: ' . $numero . '</p>';
 }

 echo '<p>Valor: ' . $valor . '</p>';
?>

Como podemos ver lo único que cambia es en el argumento de la función, donde hemos añadido &, y ahora vemos que el resultado es:
Numero: 9
Valor: 9


No hay comentarios:

Publicar un comentario