Ne zaman @ yararlı hale gelir?

6 Cevap php

Bildiğiniz gibi, bir php istruction önce @ karakter gündeme getirilen her nihai uyarı, hata veya haber bastırmak.

Şahsen, ben bu hataları işlemek için tercih becose, bu tekniğin sevmiyorum, ve gerçek hayatta, hata yok olur ya da yönetilen olması gerekir.

Bu arada, ben bu tekniği birçok komut (CMS eklentileri, açık kaynak sınıflar) uygulanacak bulabilirsiniz.

Bu yüzden, gerçekten @ (bu durumda, bir örnek takdir) faydalı olduğu, ya da sadece yavaş geliştiriciler içindir ki?

6 Cevap

Sadece, örneğin, bir başarısız mysql_connect çağrı düşünüyorum. Aksi takdirde, bu durumda (aynı zamanda genellikle başka kimse görmek istemediğiniz bazı ayrıntılarını gösteren) kullanıcıya gösterilen hata mesajı bastırmak isteyebilirsiniz.

PHP uyarı @-işaretiyle yoluyla bastırıldı rağmen, sonradan kullanıcıya dost bir hata mesajı gibi bazı eylemleri gerçekleştirebilirsiniz.

Ancak aşağıdaki örnekte gibi şeyler için @ "kötüye" kesinlikle iyi bir fikir değil:

@$undefinedVariable .= 'some text';

Ne istediğinizi elde etmek için başka, daha iyi bir yol var olduğunda yukarıda olandan, sadece bunu kullanmak gerekir orada hata bastırma işareti kötü kullanımı için çok daha fazla örnek vardır.

Sorunuzun cevabı basit ve direkt: hayır, @ yararsız olduğunu ve aslında zararlı ve kullanılmamalıdır. Asla.

Eğer gerçekten kod kalitesi ve doğruluğu hakkında umurumda değil ne zaman Düşündüğüm tek istisnası, hızlı "run-bir zamanlar" komut vardır.

Üretim komut olarak, ben istisnalar içine hataları dönüştürür set_error_handler kullanarak öneririm, ve try bir hata göz ardı edilmelidir nadir durumlarda boş catch bloğu ile:

 try {
    unlink('tempfile');
 } catch(Exception $e) {
   // i don't care
 } 

Tek kullanımlık durum var: Eğer, scream @ operatörü devre dışı bırakan bir PECL eklentisini test etmek istiyorum. :)

Ben biraz geciktim, ama @ PHP kullanarak normalde iyi bir fikir değildir. Ben üretim için sadece test kodu için kullanabilirsiniz ve kesinlikle istemem.

Kullanım hataları çok daha iyi bir yol set_error_handler fonksiyonunu (http://ch.php.net/set_error_handler) kullanıyor. Bir şeyler yanlış giderse, sadece hatayı log (ve belki yönetici bildirmek) ve ardından kullanıcıya özel bir hata iletisi görüntüleyebilir veya sadece bir uyarı / ikaz eğer sadece bunu görmezden gelebilir edebilirsiniz. (Muhtemelen bu zaten yapıyoruz.)

@ yine kullanışlı giriyor ve bu. Eğer bir komutun bir @ append ve hata her türlü neden olursa, hata işleyicisi zaten adı verilecek, ancak parametre ile 'Errno' sıfıra ayarlanır. Php hata düzeyleri farklı değerlere (http://ch.php.net/manual/en/errorfunc.constants.php) listesine bakabilirsiniz. Bunların hiçbiri sıfıra eşittir, böylece bir prepending @ ile fonksiyonlarda meydana hataları tespit edebilirsiniz. Örneğin "bayrak" önemsiz hataları için kullanabilirsiniz ya da başka bir amaç için kullanabilirsiniz (Eğer yürütme iptal, ancak hata ayıklama için yararlı olabilir gibi zaten oturum emin olmak istemiyorum).

Sadece yararlı bir durum olurdu:

Eğer php / apache yapılandırma erişimi yok ve eğer hataları kullanıcıya gösterilir.

Aksi takdirde, kullanmak @... ve bazı log sistemi (dosya, veritabanı, vb) (php / apache config) yeniden yönlendirme hataları ASLA.

PS: bazı resmi PHP belgelerinde, bunun yerine bir dosya var ve sonra, onlar sadece @unlink bunu siler, denetimi olduğunu görebilirsiniz. Ama ben bunu sevmiyorum: I (vb erişim haklarını,) sorun durumunda benim günlükleri hata almak için tercih ederler.

Gerçekten @ sevmediğim, ama bazen bazı kurulumları da kaçınılmaz.

Şahsen ben sadece log hataları ve sessizce üretim kurulumları başarısız ziyade iletileri bastırmak için @ koltuk değneği kullanmak için config PHP ayarlamayı tercih ederler.

İyi kullanım: uyarılar. Bazen fonksiyonları uyarıları atmak ve sadece yeniden olmadan yapabileceğimiz bir şey yok, ama yine de düzgün çalışır. @ bunu bastırır.