1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-26 16:32:13 +01:00
Files
archived-doc-es/reference/errorfunc/functions/set-error-handler.xml
2005-01-20 17:21:41 +00:00

189 lines
7.5 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- splitted from ./es/functions/errorfunc.xml, last change in rev 1.1 -->
<!-- last change to 'set-error-handler' in en/ tree in rev 1.1 -->
<refentry id="function.set-error-handler">
<refnamediv>
<refname>set_error_handler</refname>
<refpurpose>
Establece una funci&oacute;n espec&iacute;fica para el manejo de errores.
</refpurpose>
</refnamediv>
<refsect1>
<title>Descripci&oacute;n</title>
<methodsynopsis>
<type>string</type><methodname>set_error_handler</methodname>
<methodparam><type>string</type><parameter>error_handler</parameter></methodparam>
</methodsynopsis>
<para>
Establece una funci&oacute;n definida por el usuario (<parameter>error_handler</parameter>) para el manejo de los errores dentro de un script. Devuelve el anterior manejador de errores (si es que existe alguno) o &false; si se produce un error. Esta funci&oacute;n se utiliza para definir un m&eacute;todo espec&iacute;fico de manejo de los errores que se producen en tiempo de ejecuci&oacute;n. Por ejemplo, se puede utilizar en aplicaciones que requieran un tratamiento especial de algunos datos/archivos cuando se produce un error cr&iacute;tico o cuando se lanza un determinado error (utilizando la funci&oacute;n <function>trigger_error</function>)
</para>
<para>
La funci&oacute;n que se quiere utilizar para el manejo de errores debe aceptar 2 par&aacute;metros: el c&oacute;digo de error y una cadena de texto que describe el error producido. A continuaci&oacute;n se muestra un ejemplo de uso de excepciones mediante el lanzamiento de errores y su manejo con una funci&oacute;n definida por el usuario:
<example>
<title>
Manejo de errores con las funciones <function>set_error_handler</function> y <function>trigger_error</function>
</title>
<programlisting role="php">
&lt;?php
// Definici&oacute;n de las constantes de error del usuario - solo PHP4
define (FATAL,E_USER_ERROR);
define (ERROR,E_USER_WARNING);
define (WARNING,E_USER_NOTICE);
// Establecer el nivel de errores notificado en este script
error_reporting (FATAL + ERROR + WARNING);
// Funci&oacute;n de manejo de errores
function myErrorHandler ($errno, $errstr) {
switch ($errno) {
case FATAL:
echo &quot;&lt;b&gt;FATAL&lt;/b&gt; [$errno] $errstr&lt;br&gt;\n&quot;;
echo &quot; Fatal error in line &quot;.__LINE__.&quot; of file &quot;.__FILE__;
echo &quot;, PHP &quot;.PHP_VERSION.&quot; (&quot;.PHP_OS.&quot;)&lt;br&gt;\n&quot;;
echo &quot;Aborting...&lt;br&gt;\n&quot;;
exit -1;
break;
case ERROR:
echo &quot;&lt;b&gt;ERROR&lt;/b&gt; [$errno] $errstr&lt;br&gt;\n&quot;;
break;
case WARNING:
echo &quot;&lt;b&gt;WARNING&lt;/b&gt; [$errno] $errstr&lt;br&gt;\n&quot;;
break;
default:
echo &quot;Unkown error type: [$errno] $errstr&lt;br&gt;\n&quot;;
break;
}
}
// Funci&oacute;n par probar el manejo de errores
function scale_by_log ($vect, $scale) {
if ( !is_numeric($scale) || $scale &lt;= 0 )
trigger_error(&quot;log(x) for x &lt;= 0 is undefined, you used: scale = $scale&quot;,
FATAL);
if (!is_array($vect)) {
trigger_error(&quot;Incorrect input vector, array of values expected&quot;, ERROR);
return null;
}
for ($i=0; $i&lt;count($vect); $i++) {
if (!is_numeric($vect[$i]))
trigger_error(&quot;Value at position $i is not a number, using 0 (zero)&quot;,
WARNING);
$temp[$i] = log($scale) * $vect[$i];
}
return $temp;
}
// Establecer la funci&oacute;n de manejo de errores
$old_error_handler = set_error_handler(&quot;myErrorHandler&quot;);
// Lanzamiento de algunos errores. En primer lugar se define un array mixto con un elemento no num&eacute;rico
echo &quot;vector a\n&quot;;
$a = array(2,3,&quot;foo&quot;,5.5,43.3,21.11);
print_r($a);
// Crear un nuevo array, generando un aviso
echo &quot;----\nvector b - a warning (b = log(PI) * a)\n&quot;;
$b = scale_by_log($a, M_PI);
print_r($b);
// Lo siguiente produce un error, ya que se pasa una cadena de texto en lugar de un array
echo &quot;----\nvector c - an error\n&quot;;
$c = scale_by_log(&quot;not array&quot;,2.3);
var_dump($c);
// A continuaci&oacute;n se produce un error cr&iacute;tico, ya que no est&aacute; definido el logaritmo
// de un n&uacute;mero negativo o igual a cero
echo &quot;----\nvector d - fatal error\n&quot;;
$d = scale_by_log($a, -2.5);
?&gt;
</programlisting>
<para>Cuando se ejecuta el anterior ejemplo, el resultado ser&aacute; similar al siguiente:</para>
<screen>
<![CDATA[
vector a
Array
(
[0] => 2
[1] => 3
[2] => foo
[3] => 5.5
[4] => 43.3
[5] => 21.11
)
----
vector b - a warning (b = log(PI) * a)
<b>WARNING</b> [1024] Value at position 2 is not a number, using 0 (zero)<br />
Array
(
[0] => 2.2894597716988
[1] => 3.4341896575482
[2] => 0
[3] => 6.2960143721717
[4] => 49.566804057279
[5] => 24.165247890281
)
----
vector c - an error
<b>ERROR</b> [512] Incorrect input vector, array of values expected<br />
NULL
----
vector d - fatal error
<b>FATAL</b> [256] log(x) for x <= 0 is undefined, you used: scale = -2.5<br />
Fatal error in line 36 of file trigger_error.php, PHP 4.0.2 (Linux)<br />
Aborting...<br />
]]>
</screen>
</example>
</para>
<para>
Un aspecto importante a tener en cuenta cuando se utiliza un manejador propio es que el
manejador de errores de PHP se deshabilita por completo (de forma temporal). De esta forma,
los cambios efectuados con la funci&oacute;n <function>error_reporting</function> no tienen
ning&uacute;n efecto, ya que se utilizar&aacute; exclusivamente la funci&oacute;n manejadora
de errores definida por el usuario. No obstante, se puede consultar el valor almacenado en
<link linkend="ini.error-reporting">error_reporting</link> y actuar en consecuencia. Adem&aacute;s, es necesario tener presente que el valor almacenado en <link linkend="ini.error-reporting">error_reporting</link> ser&aacute; igual a 0 si la sentencia que origin&oacute; el error tiene como prefijo el <link linkend="language.operators.errorcontrol"> operador @ </link>.
</para>
<para>
Adem&aacute;s, la funci&oacute;n manejadora de errores deber&aacute; hacer uso de la funci&oacute;n <function>die</function> si es necesario. Si la funci&oacute;n manejadora de errores deuelve un valor, la ejecución del script continuar&aacute; en la sentencia siguiente a la que origin&oacute; el error.
</para>
<note>
<para>
Si se produce un error antes de que se ejecute el script (por ejemplo cuando se sube un archivo), no se puede utilizar un manejador creado por el usuario, ya que en ese momento a&uacute;n no ha sido registrado.
</para>
</note>
<note>
<para>
El segundo par&aacute;metro <parameter>error_types</parameter> se introdujo a partir de PHP 5.
</para>
</note>
<para>
Puede consultar tambi&eacute; las funciones <function>error_reporting</function>,
<function>restore_error_handler</function>,
<function>trigger_error</function> y <function>user_error</function>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->