@ karakter sebelum panggilan fungsi

135

Apa perbedaan antara kedua pemanggilan fungsi ini di PHP?

init_get($somevariable);

@init_get($somevariable);
dewi air
sumber
"@" akan menutup kesalahan dan pemberitahuan php
Erkan Özkök

Jawaban:

210

"@" akan membungkam segala kesalahan php yang dapat ditimbulkan oleh fungsi Anda.

solidgumby
sumber
Tetapi bagaimana jika Anda meletakkan @di depan trigger_errorfungsi PHP ? Saya telah melihat itu dalam beberapa kode, tetapi perilakunya tidak konsisten untuk saya sejauh ini. Dalam beberapa kasus, saya melihat kesalahan yang dilaporkan oleh penangan kesalahan yang dikonfigurasi dan dalam kasus lain sepertinya dilaporkan.
fritzmg
2
The @sementara akan diatur error_reportingke 0 tapi tidak akan "menekan" kesalahan.
solidgumby
36

Seperti yang sudah dijawab @akan menghentikan kesalahan (jika ada) muncul.
Dalam hal kinerja, ini tidak dianjurkan.

Apa yang dilakukan php adalah:

  • membaca status tampilan kesalahan
  • mengatur tampilan kesalahan untuk tidak menunjukkan kesalahan
  • menjalankan fungsi Anda
  • mengatur tampilan kesalahan ke kondisi sebelumnya

Jika Anda tidak ingin kesalahan muncul, gunakan error_reporting(0);.

Atau cukup tulis kode bebas bug: P

AntonioCS
sumber
Lebih suka memberi angka nol, tetapi jika itu berhasil, hebat tidak tahu tentang hal itu :)
AntonioCS
1
Bagaimana dengan fungsi yang tidak Anda kendalikan, seperti surat misalnya? Opsi lain mana yang ada? Saya menggunakan @ saat ini, tetapi akan lebih baik untuk dapat melakukannya dengan cara yang berbeda
spuas
6

Seperti yang dikatakan semua orang, ini menghentikan output kesalahan untuk fungsi tertentu itu. Namun, ini sangat mengurangi kinerja karena harus mengubah pengaturan tampilan kesalahan dua kali. Saya akan merekomendasikan JANGAN mengabaikan peringatan atau kesalahan dan memperbaiki kodenya.

Daniel Sorichetti
sumber
Terima kasih untuk semua jawaban Anda. Kode itu bukan milik saya, saya hanya melihat keingintahuan kode phpBB, jadi saya tidak memiliki masalah kinerja. :) Terima kasih lagi.
nixie