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 explotan ciertas variables para realizar una tarea más o menos elemental.

PHP basa su eficacia principalmente en este tipo de elemento. Una gran librería que crece constantemente, a medida que nuevas versiones van surgiendo, es complementada con las funciones de propia cosecha dando como resultado un sinfín de recursos que son aplicados por una simple llamada.

Las funciones integradas en PHP son muy fáciles de utilizar. Tan sólo hemos de realizar la llamada de la forma apropiada y especificar los parámetros y/o variables necesarios para que la función realice su tarea.

Lo que puede parecer ligeramente más complicado, pero que resulta 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 la 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 formatos diversos para nuestros textos como si se tratase de hojas de estilo que tendrían la ventaja de ser reconocidas por todos los navegadores.

Por supuesto, la función ha de ser definida dentro del script ya que no se encuentra integrada en PHP sino que la hemos creado nosotros. Esto en realidad no pone ninguna pega ya que puede ser incluida desde un archivo en el que iremos almacenando las definiciones de las funciones que vayamos creando o recopilando.

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

require("libreria.php") o include("libreria.php")

En resumen, 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>

Ejecutar script
Echar un vistazo al codigo fuente del navegador

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 permitirnos utilizar un determinado tipo de librería 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.

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 y tiempo podemos llegar poseer nuestro pequeño tesoro.

Nota: Si lo deseas puedes repasar todos los conceptos anteriores sobre las funciones, así como diversas otras cosas interesantes en 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-").

En el código mostrado se hacen un par de llamadas a la función para ver el resultado obtenido con diferentes cadenas como parámetro. Podemos ver el script en marcha.

Autor

Rubén Alvarez

Redactor de DesarrolloWeb.com

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