caractere @ antes de uma chamada de função

135

Qual é a diferença entre essas duas chamadas de função no PHP?

init_get($somevariable);

@init_get($somevariable);
nixie
fonte
o "@" irá fechar quaisquer erros php e avisos
Erkan Özkök

Respostas:

210

o "@" silenciará quaisquer erros de php que sua função possa gerar.

solidgumby
fonte
Mas e se você colocar @na frente da trigger_errorfunção do PHP ? Eu já vi isso em algum código, mas seu comportamento é inconsistente para mim até agora. Em alguns casos, vejo o erro sendo relatado pelo manipulador de erros configurado e, em outros casos, parece ser relatado.
Fritzmg
2
O @temporariamente será definido error_reportingcomo 0, mas não "suprimirá" o erro.
usar o seguinte código
36

Como já foi respondido @, o erro (se houver) interromperá a exibição.
Em termos de desempenho, isso não é recomendado.

O que o php está fazendo é:

  • lendo o estado de exibição de erro
  • configurando a exibição de erro para não mostrar erros
  • executando sua função
  • configurando a exibição de erro para seu estado anterior

Se você não deseja que erros apareçam em uso error_reporting(0);.

Ou apenas escreva um código sem erros: P

AntonioCS
fonte
Preferem colocar zero, mas se isso funciona, ótimo não sabia sobre isso :)
AntonioCS
1
E as funções que você não controla, como correio, por exemplo? Quais outras opções existem? Eu estou usando @ agora, mas seria ótimo para ser capaz de fazer de forma diferente
spuas
6

Como todos disseram, ele interrompe a saída de erros para essa função específica. No entanto, isso diminui bastante o desempenho, pois é necessário alterar a configuração de exibição de erro duas vezes. Eu recomendaria NÃO ignorar avisos ou erros e corrigir o código.

Daniel Sorichetti
fonte
Obrigado a todos por suas respostas. Esse código não é meu, eu estava apenas olhando o código phpBB por curiosidade, então não tenho problemas de desempenho. :) Obrigado novamente.
Nixie