Try Catch en PHP

Weahl

Estoy un poco confuso con esto del manejo de excepciones.

A ver, poniendo el caso de que tenga una función llamada getNombreProvincia($idProvincia) que cuando no existe la provincia lance una excepción y si existe devuelve el nombre.

¿Esa excepción debería recogerla en la misma función, o fuera de ella?
¿El catch debería hacer echo del error o hacer return con la cadena de error?

No sé si me he explicado bien o faltan datos, es que estoy ya quemado con esto.

Gracias.

B

#1 http://php.net/manual/es/language.exceptions.php ahi tienes todo lo que necesitas y varios ejemplos.

Pero con el primer ejemplo creo que te vale.

function inverso($x) {
    if (!$x) {
        throw new Exception('División por cero.');
    }
    else return 1/$x;
}

try {
    echo inverso(5) . "\n";
    echo inverso(0) . "\n";
} catch (Exception $e) {
    echo 'Excepción capturada: ',  $e->getMessage(), "\n";
}
Weahl

Eso lo conozco, el problema es que no se cuando aplicarlas ni de que manera, si el trycatch debería estar dentro de la función o donde se la llama, si debería hacer un echo o un return.

¿Algún consejo para manejo de errores?

1 respuesta
dagavi

#3 Lanzar una excepción es hacer el throw.

Un try captura los throws.

Por lo tanto si tu función debe de lanzar una excepción, obviamente no debes capturarla dentro de la función.

La cosa está en que si yo llamo a la función esta vaya bien o me lance la excepción:

try {
    tuFunción(argumento);
    // Ha ido todo bien
}
catch (Error1) {
    // Hago algo... o no
}

Lo de si se debe hacer un echo o un return es depende de lo que haga la función.

Un ejemplo:

int suma(int x, int y) { return x + y;  }

Este código hace la suma de 2 números y retorna el resultado. Simplemente hace eso, me da el resultado de la suma. Si quiero mostrarlo por pantalla puedo hacer

escribir suma(1, 2)

Pero otra cosa que podría hacer es tener una función que ESCRIBE la sumad e 2 números:

void suma(int x, int y) { escribir x + y; }

suma(1, 2)

El resultado en ambos casos es el mismo, al ejecutar todo se escribe el resultado de la suma, peor en un caso tengo una función que me devuelve un numero, un cálculo, el resultado de la suma, y yo hago con el lo que quiera, y en el otro es una función que escribe el resultado de una suma.

¿Debes de hacer un echo o un return?

Depende de lo que haga tu función. Si es una función que te devuelve algo, pues hará un return, si es una función que escribe por pantalla pues hará el echo (y podría retornar algo, pero bueno).

Teniendo en cuenta que lanzas una excepción seguramente retornarás algo y después ya harás lo que te salga con ese algo (por ejemplo, hacerle un echo).

El código podría quedar algo como

try {
    res = miFuncion(algo);
    echo res
}
catch (Excepcion) {
    echo "No se ha encontrado lo que buscas"
}

Parece que estás empezando. Yo empecé en la universidad con C++ (aunque con lo limitado que era, era igual que C) y también tenía la misma duda: ¿Hacer una función que retorne la suma o una que la escriba? En ambos casos el resultado es el mismo. Al final le vas pillando el truco. Irás viendo que no es buena idea (o no queda bonito) tener funciones que te hagan cálculos + los muestren.

1 respuesta
Weahl

#4 Muchísimas gracias, me ha quedado mucho más claro :)

Usuarios habituales