Resumo : neste tutorial, você aprenderá como usar a try...catch...finally
instrução PHP para lidar com exceções e limpar os recursos.
Introdução à instrução try…catch…finally do PHP
A instrução try…catch permite lidar com exceções. Quando ocorre uma exceção no try
bloco, a execução salta para o catch
bloco. No catch
bloco, você pode colocar o código que trata a exceção.
O exemplo a seguir usa o bloco try…catch para ler um arquivo CSV em um array :
<?php
$data = [];
try {
$f = fopen('data.csv', 'r');
while ($row = $fgetcsv($f)) {
$data[] = $row;
}
fclose($f);
} catch (Exception $ex) {
echo $ex->getMessage();
}
Linguagem de código: HTML, XML ( xml )
Neste exemplo, caso ocorra um erro na leitura do arquivo, a execução salta para o catch
bloco. Portanto, a seguinte instrução nunca será executada:
fclose($f);
Linguagem de código: PHP ( php )
Quando o arquivo não é fechado corretamente, ele pode ficar inacessível posteriormente.
Para garantir que o arquivo será fechado corretamente, independentemente de qualquer exceção ocorrer ou não, você pode fechar o arquivo no finally
bloco assim:
<?php
$data = [];
try {
$f = fopen('data.csv', 'r');
while ($row = $fgetcsv($f)) {
$data[] = $row;
}
} catch (Exception $ex) {
echo $ex->getMessage();
} finally {
if ($f) {
fclose($f);
}
}
Linguagem de código: HTML, XML ( xml )
O finally
é um bloco opcional da instrução try…catch. O finally
bloco sempre é executado após o bloco try
ou catch
.
Neste caso, se ocorrer uma exceção durante a leitura do arquivo, a execução salta para o catch
bloco para tratá-la e então o finally
bloco executa para fechar o arquivo.
A sintaxe do try...catch...finally
bloco é a seguinte:
<?php
try {
// do something
} catch (Exception $e) {
// code to handle exception
} finally {
// code to clean up the resource
}
Linguagem de código: HTML, XML ( xml )
PHP finalmente e retorno
A seguir define a divide()
função que retorna a divisão de dois números. Se ocorrer um erro, ele retornará null
.
<?php
function divide($x, $y)
{
try {
$result = $x / $y;
return $result;
} catch (Exception $e) {
return null;
} finally {
return null;
}
}
Linguagem de código: HTML, XML ( xml )
No entanto, o seguinte exibe NULL em vez de 5:
<?php
// ...
$result = divide(10, 2);
var_dump($result); // NULL
Linguagem de código: HTML, XML ( xml )
Normalmente, a return
instrução interrompe imediatamente a execução e retorna um valor. No entanto, não funciona dessa maneira quando é usado com a try...catch...finally
instrução.
Quando você usa a return
instrução com a try...catch...finally
instrução, o bloco final ainda é executado após a return
instrução.
O resultado será retornado após a finally
execução do bloco. Além disso, se o finally
bloco tiver uma return
instrução, o valor do finally
bloco será retornado.
A declaração try…finalmente
Na try...catch..finally
instrução, o bloco catch
ou finally
é opcional. Portanto, você pode ter a try...finally
declaração assim:
<?php
try {
// do something
} finally {
// clean up
}
Linguagem de código: HTML, XML ( xml )
A try...finally
instrução permite lançar uma exceção enquanto limpa o recurso adequadamente.
Resumo
- Use a
try...catch...finally
instrução para lidar com exceções e limpar os recursos. - O
finally
bloco sempre é executado após o bloco try ou catch. - Se
try
oucatch
tiver areturn
instrução, o valor será retornado somente após afinally
execução do bloco.