mirror of
https://github.com/php/doc-pt_br.git
synced 2026-03-23 22:52:12 +01:00
91 lines
3.3 KiB
XML
91 lines
3.3 KiB
XML
<?xml version="1.0" encoding="utf-8"?><!-- EN-Revision: 16934048f79c6e117cd16a23c09c1b2ea502e284 Maintainer: leonardolara Status: ready --><!-- CREDITS: ae, leonardolara -->
|
|
<sect1 xml:id="language.operators.errorcontrol">
|
|
<title>Operadores de Controle de Erro</title>
|
|
<titleabbrev>Controle de Erro</titleabbrev>
|
|
<simpara>
|
|
O PHP suporta um operador de controle de erro: o sinal 'arroba' (<literal>@</literal>).
|
|
Quando ele precede uma expressão em PHP, qualquer mensagem de erro que possa ser
|
|
gerada por aquela expressão será ignorada.
|
|
</simpara>
|
|
<para>
|
|
Se um manipulador de erro personalizado estiver configurado com
|
|
<function>set_error_handler</function>, ele ainda assim será chamado,
|
|
mesmo com a mensagem de diagnóstico suprimida.
|
|
</para>
|
|
|
|
<warning>
|
|
<para>
|
|
Antes do PHP 8.0.0, <function>error_reporting</function> chamada dentro de um manipulador de erro
|
|
sempre retornava <literal>0</literal> se a mensagem de erro era suprimida pelo operador <literal>@</literal>.
|
|
Desde o PHP 8.0.0, ele retorna o valor da expressão bitwise dos valores:
|
|
<literal>E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR | E_PARSE</literal>.
|
|
</para>
|
|
</warning>
|
|
|
|
<simpara>
|
|
Quaisquer mensagens de erro geradas na expressão ficam disponíveis no elemento <literal>"message"</literal>
|
|
do array retornado por <function>error_get_last</function>.
|
|
O resultado daquela função irá se alterar em cada erro, então é necessário fazer a verificação imediatamente.
|
|
</simpara>
|
|
<para>
|
|
<example>
|
|
<title>Erro de arquivo intencional</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$my_file = @file ('arquivo_nao_existente') or
|
|
die ("Falha abrindo arquivo: erro foi '" . error_get_last()['message'] . "'");
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Suprimindo expressões</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// Isto funciona para qualquer expressão, não apenas para funções:
|
|
$value = @$cache[$key];
|
|
// não haverá nenhum aviso se a chave $key não existir.
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<note>
|
|
<simpara>
|
|
O operador <literal>@</literal> funciona somente em
|
|
<link linkend="language.expressions">expressões</link>.
|
|
Uma regra simples para lembrar disso: se você pode pegar o valor de alguma coisa,
|
|
você pode prefixar isso com o operador <literal>@</literal>.
|
|
Por exemplo, ele pode prefixar variáveis, chamadas de funções,
|
|
alguns constructos de linguagem (<function>include</function>),
|
|
e assim por diante.
|
|
O operador não pode ser prefixado em definições de classes ou funções,
|
|
estruturas condicionais como <literal>if</literal>,
|
|
&foreach;, e semelhantes.
|
|
</simpara>
|
|
</note>
|
|
<warning>
|
|
<para>
|
|
Antes do PHP 8.0.0, o operador <literal>@</literal> conseguia
|
|
inibir erros críticos que iriam encerrar a execução do script.
|
|
Por exemplo, prefixar <literal>@</literal> numa chamada de uma função
|
|
inexistente, por estar indisponível ou por erro de digitação, iria
|
|
encerrar o script sem nenhuma indicação da causa.
|
|
</para>
|
|
</warning>
|
|
|
|
<sect2 role="seealso">
|
|
&reftitle.seealso;
|
|
<para>
|
|
<simplelist>
|
|
<member><function>error_reporting</function></member>
|
|
<member><link linkend="ref.errorfunc">Manipulação de erros e funções de log</link></member>
|
|
</simplelist>
|
|
</para>
|
|
</sect2>
|
|
</sect1>
|