@ 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);

la "@" cerrará cualquier error y
aviso de

Respuestas:


210

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


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


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.