Funciones en PHP

Guía completa con ejemplos y mejores prácticas

Manejo de Excepciones en PHP

PHP permite el manejo de excepciones mediante bloques try-catch, similar a otros lenguajes de programación.

<?php
function dividir($n1, $n2)
{
    $resultado = null;
    try
    {
        if( $n2 == 0 )
            throw new Exception("División por cero", 74787);
        else
            $resultado = $n1 / $n2;
    }
    catch( Exception $e )
    {
        echo "<p>Entramos en 'Exception'</p>";
        throw $e;
    }
}
//--------------------
try
{
    dividir(4, 0);
}
catch( Exception $e )
{
    echo "Ha ocurrido una una Excepción:<br>";
    echo "<p>==============================</p>";
    echo "Código: ".$e->getCode()."<br/>";
    echo "Mensaje: ".$e->getMessage()."<br/>";
    echo "Archivo: ".$e->getFile()."<br/>";
    echo "Línea: ".$e->getLine()."<br/>";
}
?>
Descargar ejemplo (funcA.php)

Nota: Al contrario que otros lenguajes de programación, a día de hoy la actual versión de PHP 5.3.0 no reconoce la cláusula finally en un bloque try ... catch().

Crear una función en PHP

El uso de funciones evita que se repita el código fuente del programa, permitiendo una mejor estructuración del programa y facilitando la depuración de errores y el posterior mantenimiento del mismo.

Para crear una función en PHP, después de la palabra function escribiremos el nombre de la misma junto con sus parámetros y el resto del código entre llaves, mientras que con return devolvemos el resultado.

<?php
function multiplicar($n1, $n2)
{
    return $n1 * $n2;
}
// Llamamos a la función:
$resultado = multiplicar(22, 3);
// Mostramos el resultado:
echo "El resultado es: ".$resultado;
?>
Descargar ejemplo (funcB.php)

Comprobar si existe una función

Si necesitamos comprobar si existe una función en PHP utilizaremos function_exists():

<?php
function multiplicar($n1, $n2) {
    return $n1 * $n2;
}

if(function_exists("multiplicar") == true)
    echo "La función 'multiplicar()' existe";
else
    echo "La función 'multiplicar()' NO existe";
?>
Descargar ejemplo (funcC.php)

Nota: Poner una arroba '@' antes del nombre de una función ocasiona que no se muestren por pantalla mensajes de aviso o error que se puedan producir.

Incluir código de otro archivo

Mediante las funciones include() e include_once() podemos incluir y evaluar otro archivo, siendo la diferencia entre ellas que include_once() no volverá a incluirlo si ya lo había sido. En caso de error devuelven un E_WARNING.

También podemos usar require() y require_once() que son similares a las anteriores, con la única diferencia de que detienen el script en caso de error.

incluirarchivo1.php

<?php
require_once("incluirarchivo2.php");
echo "<p>Estamos en el primer archivo</p>";
?>
Descargar

incluirarchivo2.php

<?php
echo "<p>Estamos en el segundo archivo</p>";
?>
Descargar

Redirigir a otra página

Para redirigir a otra URL o página web usaremos la función header(), la cual debe ser llamada antes de enviar cualquier otra información al navegador web.

<?php
header("Location: http://www.dmdesign.com.ar/");
?>
Descargar ejemplo (funcD.php)

En el siguiente ejemplo puedes ver cómo cargar otro archivo de página web:

<?php
header("Location: funcC.php");
?>

Enviar cabeceras

Aparte de para redirigir a otra página también usaremos header() para enviar encabezados al navegador web.

En el siguiente ejemplo enviamos encabezados que informan de que será enviado un archivo PDF:

<?php
$archivo = "test.pdf";
if(file_exists($archivo))
{
    // Cabeceras que indican que enviaremos el PDF y su tamaño:
    header("Content-type: application/pdf");
    header("Content-Disposition: attachment; filename=".$archivo);
    header("Content-length: ".filesize($archivo));
    // Leer y enviar el archivo al navegador web:
    readfile($archivo);
}
?>
Descargar ejemplo (funcF.php)

Usaremos las función headers_list() para comprobar si se han definido cabeceras, y headers_sent() para verificar que efectivamente han sido enviadas (es posible que no lo sean tras procesarse header() sino que hayan quedado temporalmente en el buffer de salida).

<?php
// Enviamos una cabecera:
header("Status: 404 Not Found");
// Forzamos que se vacíe el buffer, enviando la cabecera:
//flush();
// Mostramos los datos de la cabecera:
print_r(headers_list());
if(headers_sent() == true)    // Comprobamos si se han enviado las cabeceras
    echo "<p>Se han enviado cabeceras</p>";
else
    echo "<p>No se han enviado cabeceras</p>";
?>
Descargar ejemplo (funcG.php)

Detener un script y controlar la salida

Para forzar la salida de un script utilizaremos la función de PHP exit(), y mediante register_shutdown_function() es posible indicar una función que será procesada al finalizar dicho script.

<?php
function salida() {
    echo "<p>Ha terminado el script</p>";
}

register_shutdown_function("salida");
exit("<p>Forzamos la salida del script</p>");
echo "<p>Esto es una cadena de texto</p>";
?>
Descargar ejemplo (funcH.php)