Funciones en 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.

Autor

Rubén Alvarez

Rubén es doctor en química y programador aficionado con experiencia en PHP.

Compartir

Comentarios

SIRDARCKCAT

01/8/2004
ES IMPORTANTE NOTAR QUE LAS FUNCIONES EN PHP SE DECLARAN IGUAL QUE EN JAVASCRIPT
FUNTION DEF(VAR) {
FUNCION
}
EN FIN PHP SE PARECE DEMASIADO A JAVASCRIPT CON EL CAMBIO DE ALGUNAS COSAS NADA MAS
(ej echo por
document.write o eval)

jose carlos

21/3/2009
quisiera saber como le hago para tener el codigo en php y me aparesca la tabla ASCII...

luis

25/5/2009
sobre el ejercicio de funcion
mira no entiendo este paso me lo puedes explicar paso por paso
for ($i=0;$i<strlen($cadena);$i++){
echo $cadena[$i];
if ($i<strlen($cadena)-1)
echo "-";

Enzzo

05/7/2009
Una duda con funciones
Buenas tardes a todos los foreros, e aquí mi problema a ver si me pueden hechar una manita.


Por ejemplo tengo yo un archivo funciones.php con esto:

[PHP]include('precios.php'); // en este archivo estan las variables $hrinicio, $eurtopen, con sus valores en numeros.

function cambio_eurtopen($hrinicio,$eurtopen){

$tmp=pow(10,2);
echo "S/. ".round(($hrinicio*$eurtopen)*$tmp)/$tmp;

}[/PHP]

esto estaría es un archivo funciones.php

después en otro archivo index.php tengo:

[PHP]include('funciones.php');
cambio_eurtopen($hrinicio,$eurtopen);
[/PHP]

//supuestamente aquí me hace todo correcto como lo esperaba, pero si después hago esto:

cambio_eurtopen($hrbase,$eurtopen);

//sin embargo esta función no esta declarada antes (ver primera variable), me hace algo que para mi es extraño, me hace la operación pero me reemplaza la variable $hrinicio por $hrbase(esta variable esta declarada en el archivo anterior precios.php), esto es normal??

Gracias pro su tiempo.
Buenas tardes

Angel1970Vcia

24/9/2009
no exactamete
no es javascript exactamente. me explico:

el siguiente código NO FUNCIONA:

$v = "1";
function modificarV(){
$v="2";
}
modificarV();
echo $v;

en este caso la salida sería ¡¡¡ 1 !!! porque la funcion tomó v como variable local

.

para funcionase tendría que ser así:

$v = "1";
function modificarV(){
return "2";
}
$v = modificarV();
echo $v;

esto SI da salida 2

.

tampoco parece funcionar el paso por refencia así:

$v="1";
function modificarV( $v ){
$v = "2";
}
modificarV( $v );
echo $v;

esto tambíen da salida ¡¡¡ 1 !!!


un flipe, cheeeeee

Angel1970Vcia

24/9/2009
no obstante
sin embargo hay una solución a esto, usar la matriz $GLOBALS así:

$v="1";
function modificarV(){
$GLOBALS['v']="2";
}
modificarV();
echo $v;

esto SI da como salida 2

por que?
porque los cerebritos que crearon PHP keren que usemos la matriz de variables globales pa especificar que no es una variable local en una función
tan fácil lo quieren hacer que la lian XD

carlos

06/11/2009
ayuda
necesito que me expliquen como crear una funcion que convierta pesos a dolares

GREYS

06/11/2009
EXPLICACION
PORFAVOR NECESITO UNA EXPLICACION PA REALIZAR UN PROGRAMA QUE GUARDE MEMORIA SIMILAR A UNA USB VIRTUAL .

gino

15/2/2010
ayuda
amigos vean si me pueden ayudar lo que kiero es una funcion en php y MySQL para poder visualizar notas de un alumno claro esta ke ya tengo mi base de datos pero kiero saber como se hace para poder visualizarla en una pagina HTML luego que me permita subir notas desde php
se los agradeceria infinitamente

dasher

11/9/2010
ayuda
tengo un codigo llamando a una funcion pero esta dentro de un include pero no lo visualizo sera por el sistema operativo?
nota: este mismo codigo en xp funciona bien

<?
include ('archivo.php');
echo "nombre de la funcion q esta dentro de archivo.php" (1,true);
?>

midesweb

06/10/2010
mayúsculas y minúsculas en el archivo a incluir
dasher,

¿Te has fijado si el archivo que intentas traerte con la función include está escrito tal y como lo pones en la ruta?

Las mayúsculas y minúsculas deben coincidir para que el archivo se obtenga bien en sistemas Linux.

VERONICA33

26/12/2010
Uso de Las Funciones
Hola a todos del foro, soy nueva aqui, estoy programando en php y he realizado dos funciones una para verificar si el numero de cedula de un socio existe en mi base de datos y otra en donde me indique si la clave existe, ah las tengo en dos archivos diferentes uno llamado ValidarCI.php y otro ValidarClave.php ,el codigo es el siguiente :
<?
function validar_ci($cedula){
$conn = mysql_connect ("localhost","root","123");
mysql_select_db("sicatsene",$conn);
$ssql= " select * from usuario where ci ='$cedula'";
$rs= mysql_query($ssql);
if (mysql_num_rows($rs) == 1) {
$ExisteCi= "Existe";
} else {
$ExisteCi= "No Existe";
}
return $ExisteCi;
}
$ExisteCi = validar_ci ($cedula);
?>
............................................................................
<?
function validar_clave($clave){
$conn = mysql_connect ("localhost","root","123");
mysql_select_db("sicatsene",$conn);
$sSQL = " select * from usuario where clave ='$clave'";
$re = mysql_query($sSQL);
if (mysql_num_rows($re) == 1) {
$ExisteClave= "Existe";
} else {
$ExisteClave= "No Existe";
}
return $ExisteClave ;
}
$ExisteClave = validar_clave ($clave);
?>
............................................................................................

Estas dos funciones son llamadas desde ActualizarClave.php, y el codigo es el siguiente:

<?
$clave = $_POST["clave"];
$cedula = $_POST ["cedula"];
$clave= MD5 ($clave);
$conn = mysql_connect ("localhost","root","123");
mysql_select_db("sicatsene",$conn);
include ("ValidarCi.php");
include ("ValidarClave.php");
$ExisteCi = validar_ci($cedula);
$ExisteClave = validar_clave($clave);
if ($ExisteCi== "No Existe" ) {
header("Location: Registrarse.php?errorci=si&?errorclave=si");
}elseif ($ExisteClave == "Existe"){
header("Location: Registrarse.php?errorci=no&?errorclave=si");
} elseif ($ExisteClave == "No Existe"){
$sentenciaSQL = "Update usuario Set clave='$clave' Where ci= '$cedula'";
mysql_query($sentenciaSQL);
header("Location: Registrarse.php?errorci=no&?errorclave=no");
}
?>
........................................................................
Cuando el cliente llena el formulario, con la cedula y la clave, estos datos son enviados a ActualizatClave.php, y cuando el navegador esjecuta el script anterior me sale el siguiente error :

Warning: Cannot modify header information - headers already sent by (output started at C:AppServwwwSIWEBCATSENEValidarCi.php:15) in C:AppServwwwSIWEBCATSENEActualizarClave.php on line 12

Porque me da error?? ya le he dado la vuelta y nada, gracias a todos,

Santi

15/2/2011
Loops
@Luis:
Eso es una 'Loop' llamada for

Lo que hace la 'Loop' es 'loopear'(es decir que va a volver desde que se cierra la loop, va a volver dependiendo de la cantidad de veces que se le asigne)
Si le ponemos
for (i=0,i<2,i++) {
echo <br>$i;

Lo que dara sera:
0
1

Ya que empieza en 0 la variable ' i '
Y luego vuelve a empezar pero esta vez dara 1
Porque termina? Porque le pusimos hasta 1 (i < 2) que significa i menor 2

En teoria, daria 0 y 1 porq le pusimos que empieze en 0, y termine en 1(1 menos que 2)

Otro ejemplo:
for(i=0,i<12,i++) {
echo <br>Nanana;

Esto loopeara 12 veces
0,1,2,3,4,5,6,7,8,9,10,11
Y dira Nanana 12 veces.

adriana

13/5/2013
php
hola tengo este problema al ejecutar el codigo me genera este error

Warning: Cannot modify header information - headers already sent in C:AppServwwwpdvsaingreso_unico.php on line 55

ESTE ES EL CODIGO

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO datos_personales (id_datos_persona, cedula, usuario, indicador, gerencia, departamento, estado, localidad, ubicacion, extencion, contexto) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
GetSQLValueString($_POST['id_datos_persona'], "int"),
GetSQLValueString($_POST['cedula'], "text"),
GetSQLValueString($_POST['usuario'], "text"),
GetSQLValueString($_POST['indicador'], "text"),
GetSQLValueString($_POST['gerencia'], "text"),
GetSQLValueString($_POST['departamento'], "text"),
GetSQLValueString($_POST['estado'], "text"),
GetSQLValueString($_POST['localidad'], "text"),
GetSQLValueString($_POST['ubicacion'], "text"),
GetSQLValueString($_POST['extencion'], "text"),
GetSQLValueString($_POST['contexto'], "text"));

mysql_select_db($database_pdvsaconx, $pdvsaconx);
$Result1 = mysql_query($insertSQL, $pdvsaconx) or die(mysql_error());

$insertGoTo = "ingreso_unico.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}



ESPERO QUE ME Ayudes

adriana

13/5/2013
buscador
hola a todos estoy realizando un programa en php soy un poco nuevo en esto y necesito que me ayuden como realizar un buscador multiple en php y como relacionar tablas en phpmyadmin vercion
phpMyAdmin - 2.10.2

Rafael Aragon

28/8/2014
Problema con funciones en php
Tengo un problema que las funciones en un script no pueden ser declaradas mas de una vez y necesito ponerlo en un Do while, para repetir el proceso que puedo hace?

jose

25/9/2014
Poner una funcion dentro de un codigo
Hola, tengo un gran problema con una función. En un plugin de la pagina www.kuvus.com tengo una función. Dicha funcion no tiene nada entre parentesis porque no la necesita. Y en un archivo, quiero insertar el resultado de esta funcion dentro de una variable. Pero resulta que el resultado de esta función siempre se me sale fuera. No logro poner el resultado de la función dentro de la variable. Porque?

Javonet

21/8/2015
if?
hola,
en el ejemplo veo el bucle FOR, pero no veo el IF.
saludos.

alejandro

04/9/2015
ayuda
necesito que alguien me ayude con este problema necesito mandar a llamar un archivo a la unidad secundaria aka en la sintaxis que tengo funciona muy bien cuando mando a llamar el archivo a la unidad principal

<body>
<p><a href="vinculo.txt"> archivo unidad c </a></p>
<p>&nbsp;</p>
<p><a href="file:///E|/vinculo.txt"> archivo unidad a </a></p>
</p>
</body>
ayuda pero la extencion la guardo con extencion php porque esa me pidieron pero no funciona solo con extencion html funciona ayuda nose si es otra sintaxis o que xd ayuda utilice para programarlo notepad++ y localhost

Dany114

08/3/2016
Solicitar ayuda
Soy nuevo en programar PHP, y tengo el siguiente problema, al utilizar un link, llamar a una funcion donde mediante una sentencia if else verifique el valor de la variable y de acuerdo a eso llamar a una pagina php u otra. Gracias

Elmer

07/11/2016
Proceso lógico para que una función actúe
Felicitaciones por el espacio. Como principiante en la programación con PHP, espero por favor su colaboración con la inquietud siguiente: ¿Cuál sería el proceso lógico para que una función de PHP actué?
1) Declarar la función 2) Escribir la función 3)Nombrar la función 4) Programar la función 5)Llamar la función y 6)Verificar en navegador

alejandro

29/11/2016
php y html
Saludos, primero que todo les cuento que soy muy nuevo en el tema de la programación, estoy haciendo un curso de php y tengo que hacer un cuadro con varias celdas el cual ya está listo, pero debo llenar las celdas con alguna información de unas funciones que tengo declaradas anteriormente, el problema es que no se como hacer para llamar las funciones desde las celdas de mi cuadro, ya que este está hecho con etiquetas <tr> y <td> pero no se como llamar una función desde estas etiquetas, sería algo como:

<tr>
<td>llamar_función<td>
</tr>

Si alguien me puede ayudar le estaré muy agradecido.