Tema:
Manejo de mensajes de error.
Pregunta:
¿Para qué sirve anteponer el arroba (@) a una sentencia?
Respuesta:
Evita se muestre el mensaje de error si lo hay.
Es tema recurrente que, viendo scripts ajenos, se encuentre con un arroba antes de una función y no se sepa el motivo. Pués como respondí arriba, la función de esto es evitar que se muestre el mensaje de error devuelto por PHP en caso que lo hubiese.
Probemos creando un archivo con una sentencia erronea:
Código PHP:
<?php
mysql_connect(); // faltan parámetros
echo "Esto es una prueba";
?>
Esto mostraria algo como:
Cita: Warning: mysql_connect(): Acceso negado para usuario: 'ODBC'@'localhost' (Usando clave: NO) in ruta/del/archivo.php on line 2
Esto es una prueba
En efecto hay un error, faltan los parámetros para establecer la conexión.
Ahora veamos el mismo ejemplo pero con la arroba antepuesta a la función que proboca el error:
Código PHP:
<?php
@mysql_connect(); // faltan parámetros
echo "Esto es una prueba";
?>
Nos debería mostrar solo el texto correspondiente a "
Esto es una prueba".
El error persiste, solo evitamos el mensaje. La utilidad de esto es evitar estos mensajes en una aplicación terminada; no deben interezarle al usuario final, puede confundirlo.
Cabe decir (al margen de esta FAQ) que hay maneras de controlar de manera "global" los mensajes de error que han de ser mostrados, vease el uso de la función
error_reporting().