Şahsen, ben bunu ne yaptığını yorumlama değil çünkü bu kod hala çok kötü olduğunu düşünüyorum. O da çok kırılgan hale geçerliliği için girdilerini test değil.
Eval kullanımları% 95 (veya daha fazla) aktif tehlikeli olduğundan ben de hissediyorum, küçük potansiyel zaman diğer durumlarda sağlayabilir olduğunu kaydederek bunu kullanarak kötü uygulama düşkünlük değer değildir. Ayrıca, daha sonra eval kullanımınız iyi olduğunu ve Psikofarmakolojik kötü neden kölelerinin açıklamak gerekecek.
Ve, elbette, PHP Perl gibi bakıyor biter ;)
(Bir "enjeksiyon saldırısı" senaryosu gibi) eval iki ana problem () vardır:
1) It may cause harm
2) It may simply crash
ve daha-sosyal-daha-teknik biri:
3) İnsanların başka bir kısayol olarak uygunsuz kullanmak özendirmek gerekir
Birinci durumda, keyfi kod yürütme (tabii ki, bilinen bir dize eval'ing yapıyorsanız değil) riski vardır. Sizin girişler olsa da, düşünmek gibi sabit olarak bilinen ya da olmayabilir.
(Bu durumda) daha büyük olasılıkla sadece kaza gerekir, ve dize bir isteğiniz karanlık bir hata mesajı ile sona erecektir. IMHO, tüm kod (hata en kullanılabilen, biçimi olarak) bir istisna hangi başarısız, mümkün olduğunca düzgün başarısız gerekir.
Ben bu örnekte, yerine davranışa kodlama daha tesadüf kodlama konum, öneririm. Evet, SQL enum ifadesi (ve bu alanın numaralama eminiz -?? Veritabanının doğru sürümü sağ tablosunun sağ alan aradın aslında cevap verdiniz), PHP dizi beyanı sözdizimi gibi bakmak olur ama gerçekten ne yapmak istediğinizi öneririm girişten çıkışa kadar kısa yolu bulmak değil, belirtilen görevi mücadele değildir:
- Eğer bir enum sahip olduğunu tespit
- Iç listesini çıkarmak
- Liste değerlerini ambalajından
Lütfen seçenek bir yapar kabaca ne olduğunu, ama bazı sarmak istiyorum hangi ise ait ve netlik ve güvenliği (örneğin, ilk maç eşleşmezse atmak, istisna veya set boş sonuç) için etrafında yorumlar.
Orada kaçan virgül veya tırnak ile olası bazı sorunlar hala var ve muhtemelen daha sonra de-alıntı verileri açmak gerekir, ama oldukça kodu olarak değil, veri olarak en azından tedavi veri yok.
Preg_version ile kötü sonuç, $ result = null olması muhtemeldir eval sürümü ile kötü bilinmiyor, ama en azından bir kaza.