Stackoverflow üzerinde, bu sorunun her zaman azaldığını görüyorum:
- E_NOTICE? == E_DEBUG, daha sofistike error_handler ile isset () ve @ karakterlerinden kaçınır
- PHP, E_NOTICE açıkken $ _GET için undefind endeksini kontrol etmemeye nasıl ayarlanır?
- PHP'nin PHP günlüğe kaydetmesini engelleme
- Böyle bir PHP 5.3 Bildirimlerini nasıl kapatabilirim?
Pek çok sağlam PHP tavsiyesi sunan Pekka bile , korkunç E_NOTICE
canavara çarptı ve kullanmaktan daha iyi bir çözüm umuyor isset()
: isset () ve empty () çirkin hale getiriyor
Şahsen ben kullanmak isset()
ve empty()
birçok yerde benim uygulamaların akışını yönetmek için. Örneğin:
public function do_something($optional_parameter = NULL) {
if (!empty($optional_parameter)) {
// do optional stuff with the contents of $optional_parameter
}
// do mandatory stuff
}
Bunun gibi basit bir snippet bile:
if (!isset($_REQUEST['form_var'])) {
// something's missing, do something about it.
}
bana çok mantıklı geliyor. Şişmiş gibi görünmüyor, kararlı kod gibi görünüyor. Ancak birçok geliştirici, uygulamalarını E_NOTICE
etkinleştiği için ateşledi , birçok sinir bozucu "başlatılmamış dizi dizini" bildirimini keşfetti ve sonra tanımlanmış değişkenleri kontrol etme ve kodlarını "gönderme" umuduyla yüzünü buruşturdu isset()
.
Başka dillerin işleri farklı şekilde ele aldığını sanıyorum. Tecrübelerden bahseden, JavaScript PHP kadar kibar değildir. Tanımsız bir değişken tipik olarak betiğin çalışmasını durduracaktır. Ayrıca, ( deneyimsizlikten konuşarak ) C / C ++ gibi dillerin derlenmeyi reddedeceğinden eminim.
Peki, PHP devs sadece tembel? (Sizden bahsetmiyorum Pekka, eski bir uygulamayı yeniden düzenlediğinizi biliyorum.) Veya diğer diller tanımlanmamış değişkenleri programcının tanımlanmış olup olmadığını ilk olarak kontrol etmelerini istemekten daha zarif bir şekilde ele alıyor mu?
( E_NOTICE
Tanımsız değişkenlerin yanı sıra başka mesajlar da olduğunu biliyorum , ancak bunlar en çok dile gelenler gibi görünüyor)
Zeyilname
Şimdiye kadar cevaplardan, isset()
kod şişirme olmadığını düşünen tek kişi ben değilim . Şimdi merak ediyorum, diğer dillerdeki programcılarla bunu ekleyen sorunlar var mı? Yoksa bu sadece bir PHP kültürü sorunu mu?