Programación en PHP/Funciones

Las funciones son rutinas creadas por el programador para realizar procesos que se repetirán o se usarán más de una vez. Las funciones pueden ser n-paramétricas (con n ≥ 0), y estos parámetros pueden ser de entrada, de salida o de entrada y salida; aunque PHP no hace esta distinción del modo en que, por ejemplo, Ada (ver en Wikipedia), sí lo hace.

En PHP, todas las funciones devuelven un valor. Aquellas que no devuelvan uno explícitamente, devuelven NULL, siguiendo el principio de que todo en PHP es una expresión.

Introducción

editar

Esta sería una llamada a una función sin parámetros:

 <?php
 function Hola(){
 $mensaje="Hola amigo";
 echo $mensaje;
 }
 ?>
 <html>
 <head>
 <title>Mi Página</title>
 </head>
 <body>
 <?php   
 Hola();
 ?>
 </body>
 </html>

El código superior ejecuta una llamada a la función

Hola()

, que imprimirá el texto "Hola amigo".


Funciones con parámetros.

Si necesitas una función a la cuál le puedas pasar parámetros, se escribiría del mismo modo, con el nombre de los parámetros entre los paréntesis, separados por comas. Para una función biparamétrica, el código podría ser algo como:


 
Función suma
 <?php 
 function suma($a, $b){
   return $a + $b;
 }
 
 $a = 1; $b = 2;
 echo "Sumemos $a + $b = " . suma($a, $b);
 ?>




Nótese que en este ejemplo hemos utilizado la palabra clave return. Esta palabra sirve para que la función devuelva valores al lugar en dónde se haya llamado.

A efectos prácticos digamos que la función se ejecuta en un entorno separado y se "sustituye" en tiempo de ejecución por el resultado devuelto por return en el contexto en el que se había llamado. En el ejemplo anterior, sumar($a, $b) === 3 (siendo === el operador de identidad).

Parámetros por defecto

editar

En la definición formal de la función se pueden especificar parámetros por defecto, de tal modo que si no se pasa uno en el momento de llamarla, el parámetro toma un valor. Si este valor no se especifica, el intérprete devolverá un error en tiempo de ejecución por número de parámetros inválido.

Para especificarlos, se hace así:

 
Ejemplo de parámetros por defecto
  function test($parametro = 'valor') {
    /* operaciones */
    return $parametro
  }




Sobrecarga de funciones

editar

Desde PHP4[Nota 1], se pueden sobrecargar funciones, esto es, definir funciones que aceptan distintos parámetros y puedan tener una lógica interna diferente.

Una función sobrecargada puede ser algo como:

 
Primer intento
function overload() {
  return array(1);
}

function overload($a) {
  return array(2, $a);
}

function overload($a, $b) {
  return array(3, array($a, $b));
}

function overload($a, $b, $c) {
  return array(4, array($a, $b, $c));
}




Falta decir que desde PHP5[Nota 1] las funciones sin parámetros especificados (con una lista vacía), pueden recibir cualquier número arbitrario de parámetros. La lista de funciones anteriores podría reescribirse como una sola, del siguiente modo:


 
Mejor aproximación
function not_overloaded() {
  return array(

func_num_args()PHP-Manual,

func_get_args()PHP-Manual

);
}




Un ejemplo que muestra los parámetros utilizados, típico en los libros, es el siguiente:


 
function abc
 function abc() {
   $array = func_get_args();
   $arrayCount = count($array);
   for($i = 0; $i < $arrayCount; $i++) {
     echo "Se utilizó como parámetro $i : {$array[$i]}";
   }
 }




 
Llamada a la función abc
abc('test', 'test2', 3, 4);
 
Resultado
Se utilizó como parámetro 0 : test
Se utilizó como parámetro 1 : test2
Se utilizó como parámetro 2 : 3
Se utilizó como parámetro 3 : 4




También se pueden crear funciones anónimas en tiempo de ejecución. Estas funciones son muy útiles en el lambda-cálculo, y se crean con create_functionPHP-Manual, con un string en el segundo parámetro que sería el código PHP que debe de realizar la función. En PHP6 se introduce un nuevo estilo de funciones anónimas que permite además asignar funciones a variables, así como se hace en otros lenguajes como JavaScript.

De este modo, el siguiente código sería válido en PHP6 o superior.


 
Código experimental
 $a = function($b) { return $b; };
if($a(45) == 45) echo "Bien!"; // Se imprime 'Bien!'




  1. 1,0 1,1 El autor no recuerda desde qué versión mínima, pero seguro que en PHP5 en todas