@ carattere prima di una chiamata di funzione


135

Qual è la differenza tra queste due chiamate di funzione in PHP?

init_get($somevariable);

@init_get($somevariable);

la "@" chiuderà eventuali errori e avvisi php
Erkan Özkök,

Risposte:


210

"@" silenzia qualsiasi errore php che la tua funzione potrebbe sollevare.


Ma cosa succede se si mette @di fronte alla trigger_errorfunzione di PHP ? L'ho visto in alcuni codici, ma finora il suo comportamento è incoerente per me. In alcuni casi, vedo l'errore segnalato dal gestore degli errori configurato e in altri casi sembra essere segnalato.
fritzmg

2
L' @impostazione verrà temporaneamente impostata error_reportingsu 0 ma non "sopprimerà" l'errore.
solidgumby


36

Come già risposto, @si fermerà la visualizzazione dell'errore (se presente).
In termini di prestazioni questo non è raccomandato.

Quello che sta facendo php è:

  • lettura dello stato di visualizzazione dell'errore
  • impostazione della visualizzazione dell'errore per non mostrare errori
  • eseguendo la tua funzione
  • impostando la visualizzazione dell'errore al suo stato precedente

Se non si desidera che vengano visualizzati errori, utilizzare error_reporting(0);.

O semplicemente scrivere codice privo di bug: P


Preferisco mettere zero, ma se funziona, fantastico non lo sapeva :)
AntonioCS

1
Che dire delle funzioni che non controlli, come ad esempio la posta? Quali altre opzioni esistono? Sto usando @ in questo momento, ma sarebbe bello poterlo fare in modo diverso
spuas


6

Come tutti hanno detto, interrompe l'output degli errori per quella particolare funzione. Tuttavia, ciò riduce notevolmente le prestazioni poiché deve modificare due volte l'impostazione di visualizzazione dell'errore. Consiglio di NON ignorare avvisi o errori e di riparare il codice.


Grazie a tutti per le vostre risposte. Quel codice non è mio, stavo solo guardando il codice phpBB per curiosità, quindi non ho problemi di prestazioni. :) Grazie ancora.
nixie,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.