@ carácter antes de una llamada a la función

135

¿Cuál es la diferencia entre estas dos llamadas de función en PHP?

init_get($somevariable);

@init_get($somevariable);
nixie
fuente
la "@" cerrará cualquier error y
aviso de

Respuestas:

210

la "@" silenciará cualquier error de php que pueda generar su función.

solidgumby
fuente
Pero, ¿qué pasa si pones @delante de la trigger_errorfunción de PHP ? Lo he visto en algunos códigos, pero su comportamiento es inconsistente hasta ahora. En algunos casos, veo el error que informa el controlador de errores configurado y en otros casos parece que se informa.
fritzmg
2
Se @establecerá temporalmente error_reportingen 0 pero no "suprimirá" el error.
solidgumby
36

Como ya se respondió, @se detendrá el error (si corresponde).
En términos de rendimiento, esto no se recomienda.

Lo que está haciendo php es:

  • leyendo el estado de visualización de error
  • configurar la pantalla de error para que no muestre errores
  • ejecutando su función
  • configurar la pantalla de error a su estado anterior

Si no desea que aparezca ningún error, use error_reporting(0);.

O simplemente escriba código libre de errores: P

AntonioCS
fuente
Prefiero poner cero, pero si eso funciona, genial no lo sabía :)
AntonioCS
1
¿Qué pasa con las funciones que no controlas, como el correo, por ejemplo? ¿Qué otras opciones existen? Estoy usando @ en este momento, pero sería genial poder hacerlo de otra manera
spuas
6

Como todos dijeron, detiene la salida de errores para esa función en particular. Sin embargo, esto disminuye el rendimiento en gran medida ya que tiene que cambiar la configuración de visualización de errores dos veces. Recomendaría NO ignorar las advertencias o errores y corregir el código en su lugar.

Daniel Sorichetti
fuente
Gracias a todos por sus respuestas. Ese código no es mío, solo estaba mirando el código phpBB por curiosidad, así que no tengo problemas de rendimiento. :) Gracias de nuevo.
nixie