Actualizado el 14-01-2007
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.

This site powered by Phorum.