> Manuales > Manual de PHP

Utilidad de las funciones, creación y almacenamiento en archivos. Ejemplo práctico de creación de función.

En nuestro manual de páginas dinámicas vimos el concepto de función. Vimos que la función podría ser definida como un conjunto de instrucciones que podemos invocar las veces que haga falta. Ya sabemos por tanto que las funciones pueden recibir parámetros, que son como variables dentro de la función a las que se le asigna valores en el momento de su invocación. Las funciones pueden servir para realizar tareas sencillas o complejas y como programadores es uno de las primeras herramientas que debemos de conocer para poder estructurar el código de un programa.

PHP basa su eficacia principalmente en su enorme biblioteca de funciones. Una gran librería que crece constantemente, a medida que nuevas versiones van surgiendo y se van incorporando nuevas áreas de trabajo dentro del lenguaje. Las funciones de PHP nos permiten realizar de una manera sencilla tareas habituales y a la hora de desarrollar una aplicación, pero además nosotros podemos hacer nuevas funciones para resolver todo tipo de tareas más específicas de nuestra aplicación.

Las funciones integradas en PHP son muy fáciles de utilizar y a lo largo de todo el Manual de PHP Básico y otros manuales de DesarrolloWeb.com iremos repasando las más usadas. Para acceder a todas las utilidades que hay detrás de una función tan sólo hemos de realizar la llamada (o invocación) de la forma apropiada y especificar los parámetros necesarios para que la función realice su tarea.

Nota: Después de la llegada de PHP 5, en el momento en el que PHP pasó a ser un lenguaje con una orientación a objetos potente, las funciones de la biblioteca del lenguaje tienen en muchos casos alternativas en base a clases y objetos. Nosotros como programadores podemos escoger trabajar con funciones corrientes o con métodos de objetos y clases, pero en general la funcionalidad a la que llegaremos es exactamente la misma.

Crear nuestras propias funciones en PHP

Lo que puede parecer ligeramente más complicado, pero que con un mínimo de experiencia resultará muy sencillo y sin lugar a dudas muy práctico, es crear nuestras propias funciones. De una forma general, podríamos crear nuestras propias funciones para conectarnos a una base de datos o crear los encabezados o etiquetas meta de un documento HTML. Para una aplicación de comercio electrónico podríamos crear por ejemplo funciones de cambio de una moneda a otra o de calculo de los impuestos a añadir al precio de articulo. En definitiva, es interesante crear funciones para la mayoría de acciones más o menos sistemáticas que realizamos en nuestros programas.

Aquí daremos el ejemplo de creación de una función que, llamada al comienzo de nuestro script, nos crea el encabezado de nuestro documento HTML y coloca el titulo que queremos a la página:

<?
function hacer_encabezado($titulo) {
  $encabezado="<html><head>t<title>$titulo</title></head>";
  echo $encabezado;
}
?>

Esta función podría ser llamada al principio de todas nuestras páginas de la siguiente forma:

$titulo="Mi web";
hacer_encabezado($titulo);

De esta forma automatizamos el proceso de creación de nuestro documento. Podríamos por ejemplo incluir en la función otras variables que nos ayudasen a construir las etiquetas meta y de esta forma, con un esfuerzo mínimo, crearíamos los encabezados personalizados para cada una de nuestras páginas. De este mismo modo nos es posible crear cierres de documento o interfaces de la web como podrían ser barras de navegación, formularios de login, etc.

Como has podido comprobar, para crear una función debemos declararla. Para ello usamos la palabra function seguida del nombre de la función. Luego unos paréntesis donde podemos indicar los parámetros que se espera recibir en su invocación y finalmente el bloque de código de la función propiamente dicha, encerrado entre llaves. En los siguientes artículos seguiremos hablando de los componentes de una función y viendo diversos ejemplos, así que no debes de preocuparte si todavía no lo ves demasiado claro.

Estructurar el código de una aplicación con nuestras propias librerías de funciones

Por supuesto, la función ha de ser definida para poder ser utilizada, ya que no se encuentra integrada en PHP sino que la hemos creado nosotros. Si pensamos que en una aplicación web completa podemos tener cientos de funciones definidas por nosotros mismos quizás te asuste que tengas demasiado código de funciones que deben ser definidas antes de ser usadas. Pero esto en realidad no pone ninguna pega, ya que pueden ser incluidas desde un archivo externo. De hecho es muy común que tengamos archivos donde solo colocamos el código de las funciones, almacenando definiciones de las funciones que vayamos creando para realizar un sitio web.

Estos archivos en los que se guardan las funciones se llaman comúnmente librerías. La forma de incluirlos en nuestro script es a partir de la instrucción require o include:

require("ruta/a/libreria.php");

O si prefieres la alternativa del include:

include("ruta/a/libreria.php");
Nota: Tanto require() como include() hacen el mismo trabajo, de traerse código que hay en archivos diferentes dentro del servidor, para que podamos utilizarlo al crear una página. La diferencia fundamental entre require e include es que la primera requiere forzosamente algo y la otra no. Es decir, si hacemos un require() de un archivo y éste no se encuentra disponible por cualquier motivo, PHP parará la ejecución del código y devolverá un "Error fatal". Si por el contrario hacemos un include() y el archivo que tratamos de traer no se encuentra disponible, entonces lo que PHP nos mostrará es una señak de advertencia, un "warning", pero tratará de seguir ejecutando el programa.

En resumen, cuando usas archivos con código de funciones (librerías) y los incluyes para usarlos desde otras páginas de la aplicación, la cosa quedaría así:

Tendríamos un archivo libreria.php como sigue

<?
//función de encabezado y colocación del titulo
function hacer_encabezado($titulo)
{
  $encabezado="<html>n<head>nt<title>$titulo</title>n</head>n";
  echo $encabezado;
}
?>

Por otra parte tendríamos nuestro script principal página.php (por ejemplo):

<?
include("libreria.php");
$titulo="Mi Web";
hacer_encabezado($titulo);
?>
<body>
El cuerpo de la página
</body>
</html>

Podemos meter todas las funciones que vayamos encontrando dentro de un mismo archivo pero resulta muchísimo más ventajoso ir clasificándolas en distintos archivos por temática: Funciones de conexión a bases de datos, funciones comerciales, funciones generales, etc. Esto nos ayudara a poder localizarlas antes para corregirlas o modificarlas, nos permite también cargar únicamente el tipo de función que necesitamos para el script sin recargar éste en exceso además de reutilizar algunas de nuestras librerías para varios sitios webs distintos.

También puede resultar muy práctico el utilizar una nomenclatura sistemática a la hora de nombrarlas: Las funciones comerciales podrían ser llamadas com_loquesea, las de bases de datos bd_loquesea, las de tratamiento de archivos file_loquesea. Esto nos permitirá reconocerlas enseguida cuando leamos el script sin tener que recurrir a nuestra oxidada memoria para descubrir su utilidad.

No obstante, antes de lanzarnos a crear nuestra propia función, merece la pena echar un vistazo a la documentación para ver si dicha función ya existe o podemos aprovecharnos de alguna de las existentes para aligerar nuestro trabajo. Así, por ejemplo, existe una función llamada header que crea un encabezado HTML configurable lo cual nos evita tener que crearla nosotros mismos.

Nota: Como puede verse, la tarea del programador puede en algunos casos parecerse a la de un coleccionista. Hay que ser paciente y metódico y al final, a base de trabajo propio, intercambio de código y dedicación podemos llegar poseer nuestro pequeño tesoro de funciones, capaces de aligerar nuestro trabajo diario.

De hecho, más adelante si sigues aprendiendo PHP profesionalmente encontrarás que existen los frameworks, que son en cierto modo como bibliotecas adicionales de funciones que puedes usar para resolver muchas más cosas, adicionales a las que el propio lenguaje ya te ofrece. Los frameworks además ayudan a los programadores a estructurar su código y a usar diversos patrones de diseño de software que facilitan la creación de proyectos de fácil mantenimiento y capaces de crecer sin volverse inmanejables. En DesarrolloWeb.com tenemos varios manuales de frameworks PHP.

Como referencia, si deseas puedes repasar todos los conceptos anteriores sobre las funciones, así como diversas otras cosas interesantes, te dejamos enlace hacia el Videotutorial sobre las funciones en PHP.

Ejemplo de función

Vamos a ver un ejemplo de creación de funciones en PHP. Se trata de hacer una función que recibe un texto y lo escribe en la página con cada carácter separado por "-". Es decir, si recibe "hola" debe escribir "h-o-l-a" en la página web.

Nota:Para comprender este ejemplo necesitamos conocer el bucle for, que se explica en el capítulo Control del flujo en PHP: Bucles II.

La manera de realizar esta función será recorrer el string, caracter a caracter, para imprimir cada uno de los caracteres, seguido de el signo "-". Recorreremos el string con un bucle for, desde el carater 0 hasta el número de caracteres total de la cadena.

El número de caracteres de una cadena se obtiene con la función predefinida en PHP strlen(), que recibe el string entre paréntesis y devuelve el número de los caracteres que tenga.

<html> 
<head> 
   	<title>funcion 1</title> 
</head> 

<body> 

<? 
function escribe_separa($cadena){ 
   	for ($i=0;$i<strlen($cadena);$i++){ 
      	echo $cadena[$i]; 
      	if ($i<strlen($cadena)-1) 
         	echo "-"; 
   	} 
} 

escribe_separa ("hola"); 
echo "<p>"; 
escribe_separa ("Texto más largo, a ver lo que hace"); 
?> 
</body> 
</html>

La función que hemos creado se llama escribe_separa y recibe como parámetro la cadena que hay que escribir con el separador "-". El bucle for nos sirve para recorrer la cadena, desde el primer al último carácter. Luego, dentro del bucle, se imprime cada carácter separado del signo "-". El if que hay dentro del bucle for comprueba que el actual no sea el último carácter, porque en ese caso no habría que escribir el signo "-" (queremos conseguir "h-o-l-a" y si no estuviera el if obtendríamos "h-o-l-a-").

Conclusión

Esperamos que esta primera introducción a las funciones en PHP te haya sido aclaradora. En los próximos artículos veremos nuevas cosas importantes para dominarlas, como el paso de parámetros en las funciones y los valores de retorno.

Rubén Alvarez

Rubén es doctor en química y programador principalmente en sus ratos libres con...

Manual