PHP:¿Para qué sirve anteponer el arroba (@) a una sentencia?

De Foros del Web

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. Pues 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 errónea:

Código PHP:

<?php
mysql_connect(); // faltan parámetros
echo "Esto es una prueba";
?> 

Esto mostraría 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 provoca 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, véase el uso de la función error_reporting().


--jam1138 14 Feb 2006

Este artículo es parte de las FAQs de PHP y el Manual de PHP.

Herramientas personales