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

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.


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


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.