|
Actualizado el
02-06-2003
versión para imprimir
|
Funciones de usuario en PHP
PHP
tiene toneladas de funciones listas para su uso.
Nosotros podemos además hacer nuestras propias funciones. Una función de
usuario en PHP no es mas que una porción de código
que podemos llamar en cualquier momento. De un lado, al dividir nuestro
código en funciones podemos aislar y perfeccionar cada una de sus
funcionalidades; de otro lado, podemos reutilizar este código, ya que una
función puede ser llamada cuantas veces la necesitemos.
Para
definir una función debemos usar la palabra reservada function. Para
llamar la función basta con invocar su nombre.
<?php
function Hiperlink () {
// Entre parentesis ()
podemos incluir valores que
//
deba usar nuestra función. El uso de ()
//
es siempre necesario.
//
El código de la función entre llaves {}
}
Hiperlink(); // esta linea llama la
función
?>
PHP no
distingue entre mayusculas y minusculas al nombrar las funciones, asi que
HiperLink sería lo mismo que Hiperlink, aunque es buena práctica ser
consistente en la forma de escribir los nombres.
Como curiosidad, podrás observar que en los mensajes de error, PHP siempre
designa tus funciones en minuscula.
Los parentesis permiten pasar valores a las funciones (como veremos despues)
y son siempre necesarios, aunque no vayas a pasar valor alguno
Un
ejemplo simple de una función sin parámetros:
<?php
function TradicionalHolaMundo (){
echo "hola mundo";
}
TradicionalHolaMundo(); // que sorpresa ! imprime
"hola mundo"
?>
El
código que puedes incluir en una función es cualquier código php válido
¿ cuando llamar a una
función ?
Por lo
general puedes usar tu nueva función antes o despues de crearla:
<?php
TradicionalHolaMundo();
function TradicionalHolaMundo (){
echo "hola mundo";
}
?>
El
código de la función es leido al cargar la página el interprete PHP, pero
no es ejecutado hasta que la función no es llamada. No existe tampoco
inconveniente en que mantengas las definiciones de tus funciones en un
archivo aparte, llamado en tu script mediante require o include.
Lo
anterior no es válido, sin embargo, si nuestra función está definida de
forma condicional:
<?php
/*************
Primer ejemplo ****************/
$buenhumor = true;
if ($buenhumor) {
function
TradicionalHolaMundo
() {
echo
"Hola Mundo
!!";
}
}
TradicionalHolaMundo(); // Podemos llamar a la
funcion desde aqui:
//
La condicion de que depende su creación
//
($buenhumor) está cumplida.
/************* segundo ejemplo ****************/
$buenhumor = false; // Considera este segundo
ejemplo:
//
Ahora la condicion no se cumple.
if ($buenhumor)
{ // Este código NO se ejecuta !!
function TradicionalHolaMundo () {
echo
"Hola Mundo
!!";
}
}
TradicionalHolaMundo(); // Error ... llamada a
función no existente.
/*************
Tercer ejemplo ****************/
TradicionalHolaMundo(); // Tampoco podemos hacer
la llamada ANTES
//
de que la condición se haya evaluado. Error !!
$buenhumor = true;
if ($buenhumor) {
function
TradicionalHolaMundo
() {
echo
"Hola Mundo !!";
}
}
?>
Además
del error que acabamos de obtener (llamada a una función no definida) también
debemos tener cuidado con el error contrario: definir una función dos
veces; esto normalmente suele pasar cuando se hace uno un lio con los includes
y llama varias veces al archivo externo que contiene la declaración de la
función).
funciones y parámetros
Podemos
pasar a nuestras funciones valores para que operen sobre ellos. PHP permite
pasar a las funciones variables, cadenas de texto, números o arrays
Los datos pasados a la función pueden ser por valor o por
referencia. En el primer caso solo pasamos el valor del dato, no su
contenedor, de forma que dicho dato (por ejemplo almacenado en una
variable) conserva su valor original fuera de la función, sin verse
afectado por los cambios que la función pueda ejecutar. En cambio si
pasamos el valor por referencia, el dato original quedará afectado por el
resultado de la función:
<?php
$msg = "Como estás ?";
function TradicionalHolaMundo ($msg)
{
$msg= "Hola Mundo !!".$msg;
echo
$msg;
}
TradicionalHolaMundo
($msg); // vuelca "Hola Mundo !! Como estas ?
echo $msg; // vuelca "Como estás ?"
$msg = "Como estás ?";
function TradicionalHolaMundo (&$msg) //advierte que usamos
&$
{
$msg= "Hola Mundo !!".$msg;
echo
$msg;
}
TradicionalHolaMundo
($msg); // $msg -> Hola Mundo !! Como estas ?
echo $msg; // vuelca "Hola Mundo !! Como estás ?"
?>
Puedes
tambien prever un valor por defecto para la función, que se aplicará salvo
que especifiques otro al llamarla:
<?php
function TradicionalHolaMundo ($msg = "Hola como
estás") {
...}
TradicionalHolaMundo(); // Hola Mundo !! Hola
como estás ?
TradicionalHolaMundo("hasta luego");// Hola Mundo !! hasta luego
TradicionalHolaMundo(""); // Hola Mundo !!
?>
Cuando
la función necesite varios valores y desees fijar un valor por defecto,
debe ser el ultimo por la derecha de los pasados.
Esto
implica un cuidadoso diseño, ya que al pasar los valores a una función debes
hacerlo por el mismo orden fijado al definirla
return
Si la
función debe retornar algun valor al script, debes indicarlo por medio de
la expresión return. El código existente en la función despues de return
no será ejecutado.
En los
sencillos ejemplos que hemos usado no empleamos return ya que la
unica instrucción de la función es precisamente una orden echo. Pero podría suceder que la función no
tuviera por finalidad volcar nada a pantalla, sino manipular un valor para,
por ejemplo, pasarselo a otrá función. En tal caso usamos return.
<?php
function TradicionalHolaMundo ($msg) {
return
"Hola Mundo
!!".$msg;
}
$blah = TradicionalHolaMundo ($msg);
?>
un ejemplo
Como ya
está bien de TradicionalHolaMundo() vamos a ver una función sencilla pero
algo mas útil: la función hiperlink() que buscará urls dentro de una
cadena de texto, convirtiendolas en enlaces:
<?php
$blah = "http://www.ignside.net";
function
hiperlink($CadenaTexto) {
$CadenaTexto = preg_replace("/(http:\/\/[0-9a-zA-Z\-\._\/]+)/",
"<a
href=\"\1\">\1</a>", $CadenaTexto);
print $CadenaTexto;
}
hiperlink($blah); // devuelve la url como
un enlace clickable
//
<A
href="http://www.ignside.net">http://www.ignside.net</A>
?>
La
anterior función toma un parámetro y busca en él, con preg_replace,
la existencia de una url correctamente escrita (http://....) y si la
encuentra construye un link que apunta a esa direccion, usando la misma
como texto visible del enlace.
Podemos perfeccionarla un poco con dos parámetros:
<?php
$blah = "http://www.ignside.net";
function hiperlink($CadenaTexto, $textovisible) {
$CadenaTexto = preg_replace("/(http:\/\/[0-9a-zA-Z\-\._\/]+)/",
"<a href=\"\1\">$textovisible</a>", $CadenaTexto);
print
$CadenaTexto;
}
hiperlink($blah, "pulsa aqui"); // devuelve
//<A
href="http://www.ignside.net">pulsa aqui</A>
?>
¿ Desventajas ?
PHP
consume mas recursos (y por tanto es ligeramente mas lento) llamando y
ejecutando una función que ejecutando código que encuentra en linea,
embebido en el script. Por eso no tiene sentido usar funciones salvo que
efectivamente vayas a utilizar esa porción de código varias veces.
|