Saya telah melihat kegunaan @
di depan fungsi-fungsi tertentu, seperti yang berikut:
$fileHandle = @fopen($fileName, $writeAttributes);
Apa gunanya simbol ini?
php
operators
error-suppression
sv_in
sumber
sumber
Jawaban:
Ini menekan pesan kesalahan - lihat Operator Kontrol Kesalahan dalam manual PHP.
sumber
isset()
tidak perlu untuk menghindariundefined offset
kesalahan.Ini menekan kesalahan.
Lihat Operator Kontrol Kesalahan dalam manual:
sumber
The
@
simbol adalah kontrol kesalahan Operator (alias "diam" atau operator "shut-up"). Itu membuat PHP menekan semua pesan kesalahan (pemberitahuan, peringatan, fatal, dll) yang dihasilkan oleh ekspresi terkait. Ini berfungsi seperti operator unary, misalnya, ia memiliki prioritas dan asosiasi. Di bawah ini adalah beberapa contoh:Apa yang sebenarnya terjadi jika Anda menggunakan penangan kesalahan khusus alih-alih penangan kesalahan PHP standar:
Ini diilustrasikan dalam contoh kode berikut:
Penangan kesalahan tidak memeriksa apakah
@
simbol berlaku. Manual menyarankan yang berikut:sumber
Perhatikan juga bahwa meskipun ada kesalahan yang disembunyikan, setiap penangan kesalahan kustom (diatur dengan
set_error_handler
) masih akan dieksekusi!sumber
Seperti yang sudah dijawab sebelumnya:
@
Operator menekan semua kesalahan dalam PHP, termasuk pemberitahuan, peringatan, dan bahkan kesalahan kritis.TAPI: Tolong, benar-benar tidak menggunakan
@
operator sama sekali.Mengapa?
Nah, karena ketika Anda menggunakan
@
operator untuk penekanan kesalahan, Anda tidak memiliki petunjuk sama sekali dari mana harus memulai ketika kesalahan terjadi. Saya sudah bersenang-senang dengan kode lama di mana beberapa pengembang@
cukup sering menggunakan operator. Terutama dalam kasus seperti operasi file, panggilan jaringan, dll. Itu semua adalah kasus di mana banyak pengembang merekomendasikan penggunaan@
operator karena kadang-kadang di luar ruang lingkup ketika kesalahan terjadi di sini (misalnya API pihak ke-3 bisa dijangkau, dll. ).Tapi apa gunanya masih tidak menggunakannya? Mari kita lihat dari dua perspektif:
Sebagai pengembang: Kapan
@
digunakan, saya sama sekali tidak tahu harus mulai dari mana. Jika ada ratusan atau bahkan ribuan panggilan fungsi dengan@
kesalahan bisa seperti setiap tempat. Tidak ada debugging yang masuk akal dalam kasus ini. Dan bahkan jika itu hanya kesalahan pihak ke-3 - maka itu baik-baik saja dan Anda selesai dengan cepat. ;-) Selain itu, lebih baik untuk menambahkan rincian yang cukup ke log kesalahan, sehingga pengembang dapat memutuskan dengan mudah apakah entri log adalah sesuatu yang harus diperiksa lebih lanjut atau jika itu hanya kegagalan pihak ke-3 yang berada di luar ruang lingkup pengembang.Sebagai pengguna: Pengguna tidak peduli sama sekali apa alasan kesalahan itu terjadi atau tidak. Software ada untuk mereka untuk bekerja, untuk menyelesaikan tugas tertentu, dll. Mereka tidak peduli apakah itu kesalahan pengembang atau masalah pihak ke-3. Khusus untuk pengguna, saya sangat menyarankan untuk mencatat semua kesalahan, meskipun mereka berada di luar jangkauan. Mungkin Anda akan melihat bahwa API tertentu sering offline. Apa yang bisa kau lakukan? Anda dapat berbicara dengan mitra API Anda dan jika mereka tidak dapat membuatnya stabil, Anda mungkin harus mencari mitra lain.
Singkatnya: Anda harus tahu bahwa ada sesuatu seperti
@
(pengetahuan selalu baik), tetapi jangan gunakan itu . Banyak pengembang (terutama kode debugging dari orang lain) akan sangat berterima kasih.sumber
@
adalah hal yang benar dilakukan lakukan, ini sangat berguna terutama jika Anda tidak kembalitext/html
(atau serupa) ke klien. (mungkin kembaliimage/png
atau "json")if( session_status() == PHP_SESSION_NONE ) session_start();
Ini adalah aplikasi lawas yang saya warisi, dan ada tempat di mana skrip penyiapan dipanggil beberapa kali, jadi saya harus mengujinya. Apa, jika ada, masalah apakah hanya dengan menggunakan@session_start();
?@$this->stats['device_os'][$date][$creative_id][$device_id][$operating_system]['clicks']++;
jauh lebih baik daripada alternatif memiliki menerbitkan cek di setiap tingkat dan mengisinya ketika tidak.Misalkan kita belum menggunakan operator "@" maka kode kita akan terlihat seperti ini:
Dan bagaimana jika file yang kami coba buka tidak ditemukan? Ini akan menampilkan pesan kesalahan.
Untuk menekan pesan kesalahan, kami menggunakan operator "@" seperti:
sumber
@
solusi semacam ini sejak awal. Bahasa pemrograman lain memiliki penanganan pengecualian yang seragam untuk menangani skenario semacam ini stackoverflow.com/questions/1087365Jika pembukaan gagal, kesalahan level E_WARNING dihasilkan. Anda dapat menggunakan @ untuk menekan peringatan ini.
sumber
@
menekan pesan kesalahan.Ini digunakan dalam cuplikan kode seperti:
Jika domain " http://www.exaple.com " tidak dapat diakses, kesalahan akan ditampilkan, tetapi
@
tidak ada yang ditampilkan.sumber
PHP mendukung satu operator pengontrol kesalahan: tanda saat
(@)
. Saat didahului dengan ekspresi dalam PHP, pesan kesalahan apa pun yang mungkin dihasilkan oleh ekspresi itu akan diabaikan.Jika Anda telah menetapkan fungsi penangan kesalahan khusus dengan
set_error_handler()
maka masih akan dipanggil, tetapi penangan kesalahan kustom ini dapat (dan harus) memanggilerror_reporting()
yang akan kembali0
ketika panggilan yang memicu kesalahan didahului oleh@
.Catatan:-
1) @ -operator hanya berfungsi pada ekspresi.
2) Aturan praktis yang sederhana adalah: jika Anda dapat mengambil nilai sesuatu, Anda dapat menambahkan operator @ ke dalamnya. Misalnya, Anda bisa menambahkannya ke variabel, berfungsi dan menyertakan panggilan, konstanta, dan sebagainya. Anda tidak dapat menambahkannya ke definisi fungsi atau kelas, atau struktur bersyarat seperti jika dan foreach, dan sebagainya.
Peringatan:-
sumber
Mungkin perlu menambahkan di sini ada beberapa petunjuk ketika menggunakan @ Anda harus menyadari, untuk menjalankan lengkap melihat posting ini: http://mstd.eu/index.php/2016/06/30/php- rapid-fire-what-is-the-symbol-used-for-in-php /
Penangan kesalahan masih diaktifkan bahkan dengan simbol @ didahului, itu hanya berarti tingkat kesalahan 0 diatur, ini harus ditangani dengan tepat dalam penangan kesalahan kustom.
Memertahankan sertakan dengan @ akan mengatur semua kesalahan dalam sertakan file ke tingkat kesalahan 0
sumber
@
menekan pesan kesalahan yang dilemparkan oleh fungsi.fopen
melempar kesalahan saat file tidak keluar.@
simbol membuat eksekusi untuk pindah ke baris berikutnya bahkan file tidak ada. Saran saya tidak akan menggunakan ini di lingkungan lokal Anda ketika Anda mengembangkan kode PHP.sumber