Airsight PHP koşullarını yazmak için üç ipucu
PHP’de koşullar, IF -Comped Control yapılarının () () gibi IF -Compute Control yapılarının çekirdeğidir. Sürpriz yaşamın bazı alanlarında çok iyidir, ancak PHP’nin geliştirilmesinde nadiren ortaya çıkar ve net bir koşullu ifadenin nasıl yazılacağını bilmek, kodunuzdaki sürprizi önemli ölçüde azaltacaktır. Hepsi temiz ve kesin koşullar yazmaya dayanır. Bu makale PHP koşullarını tanımlar ve daha sonra daha fazla tahmin edilen kodlar ve daha az hata için daha iyi koşullar yazmak için üç pratik ipucu sunar.
PHP’de hangi koşullar döngü yaparken PHP’yi ve PHP kontrol grafiğine girişimizde IF -STATEMENT ve IF’nin ifadesi gibi koşullu ifadeler getirdi. Bu yapı, PHP’de “hangi kod yürütüldüğünü, ne zaman yürütüldüğünü” belirler ve bunlar aynısına sahiptirler: // if-statement ise ( # koşul #): // Action Endif; // if … elseif … else ifadesi ( # koşul #): // Action elseif ( # koşul #): // Eylem: // Action Endif; // while () döngüsü while ( # koşul #): // aksiyon endif; Bu yapının benzerliği koşuldur: doğru veya yanlış değerlendiren bir ifade, böylece başka bir kodda olanları dikte etmek. Bu koşul, yukarıdaki koddaki # Durum #’yı kaplar (bu kesinlikle gerçek kod değildir, bu nedenle doğrudan NASA ana çerçevesinde çalışmayın).
Ve vahşi doğada, parantezlerin dışında koşullar da yazabileceğinizi biliyor muydunuz? Bu daha az yaygındır, ancak bu gerçekten geçerli bir PHP’dir: // Vahşi bir durum görünür! $ boolean = 2 === 3; // Bu yanlış olarak değerlendirilir, bu nedenle $ boolean değeri artık kontrol yapımızı daha sözlü bir şekilde kullanmamıza izin veren yanlıştır: $ first_boolean = 2 === 3; // Bu yanlış olarak değerlendirilir, bu nedenle $ first_booolean değeri artık yanlıştır ($ first_booolean === true): echo ‘yürütmeyeceğim’; // Bu doğru, endif olmayacaksınız; $ Second_Boolean = 1 === 1; // Bu doğru olarak değerlendirilir, bu nedenle $ Concrect_Boolean değeri artık doğrudur ($ Second_Boolean === true): echo ‘yürüteceğim’; // Endif sayfasına “Yürüteceğim” yazdırıyor; Bu makalede “PHP koşulları” dediğimizde, 1 === 1 veya 2 === 3 (veya typeof ($ var) === ‘dizi’ veya diğerinin kendisi hakkında konuşuyoruz: Hakikat değeri belirtilir ve bu diğer kodların çalışıp çalışmayacağına karar vermesine yardımcı olur.
Yani, “İyi Koşullar Yazma” temelde “iyi koşullu ifadeler yazmak” veya hatta “İfadeler İfadeleri Yazmak” ile aynı, bu yüzden bu makalede ve gerçek insanlar bu ilgili terimleri oldukça yakın kullanma eğilimindedir..PHP şartlı ifadeleri nasıl yazdığımız konusunda neden endişelenmemiz gerekiyor PHP, gevşek yazılan bir dildir.Bana herhangi bir veri türü olabilen bir değişken, $ var verebilirsiniz.Bir tamsayı, boolean, şamandıra veya hatta büyük bir ilişkilendirme dizi olabilir.Ve sonra “Oh şimdi $ var = ‘merhaba’;”Ve aniden $ var veri türü, bunu düşünmek zorunda kalmadan anında bir dizeye dönüştü.
Harika, değil mi? Peki, bir tür. Gevşek yazma, PHP yazmayı daha kolay değil, aynı zamanda kendinizi bozma özgürlüğü sağlar. Emniyet kemeri takmadığınızda ses çıkarmayan eski bir araba gibi. Size daha fazla özgürlük verir – çeşitli. Ama yapma özgürlüğü nedir? Emniyet kemerinizi giymiyor musunuz? Çözüm, her zaman bir emniyet kemeri ile bağlı kaldığınızdan emin olmaktır. PHP’de bu, yazma değişkenlerinin karışıklığını ve olası diğer karışıklık kaynaklarını ortadan kaldıran bir kod yazmak anlamına gelir. Karışıklık genellikle IF ifadenizin ve diğer koşullu ifadelerinizin makineleri olan PHP koşullarında en tehlikeli görünür. Bu ortamda neden böyle sorunlar var? Çünkü durumun özü açık olmalarıdır: doğru ya da yanlış geri dönerler, mükemmel bir zıttır. Geri dönen koşulları bozun ve başınız belada. Bu makalenin bir sonraki kısmı, her zaman ne olması gerektiğini döndüren keskin bir PHP koşulu yazma amacına nasıl ulaşılacağı konusunda pratik bir öneridir. PHP hava geçirmez durumunu aşağıdaki ipuçlarına nasıl yazılır aynı genel dersleri öğretir:
Açık ol. Ne olmasını beklediğiniz – tahmin edilmeyen – tam olarak test eden koşulları yazın.
Varsayma. Durumunuz için test edilen doğru ifadeyi anladığınızı düşünmeyin: bilin.
Kod örneklerini gördüğümüzde dersi hatırlayın. 1. PHP durumunuzda test etmeye çalıştığınız şeyin dolgunluğunu yazın. Kısayol almayın.
Örneğin, bir değişkende bir şey yapmak istiyorsak, kötü yazılmış gereksinimlerle, değişkenin var olduğundan emin olmalıyız, değil mi? Bu yüzden IF ifadesini kullanabiliriz – hiçbir şey hakkında konuşmadığımızdan emin olmak için. $ vice_me_a_number = 2; // ($ ke vites_me_a_number): $ new_number = $ ver_me_a_number + 2; Echo ‘Numara için teşekkürler. Artı 2 ‘. $ New_Number. ‘.’; Endif; Yukarıdaki kod çalıştırılacak ve “Numara için teşekkür ederiz. Bu artı 2 4’tür. Ama bu çok kırılgan. Nedenine bakalım: $ vice_me_a_number = 0; if ($ vice_me_a_number): $ new_number = $ GEÇ_ME_A_NUMBER + 2; Echo ‘Numara için teşekkürler. Artı 2 ‘. $ New_Number. ‘.’; Endif; Yukarıdaki kod hiçbir şey yazdırmaz. Neden? Çünkü 0 çok benzer, PHP’nin zihninde, yanlış. 0’ın üzerindeki sayıyı “doğru” olarak görür, bu yüzden ilk örnek gerçekleştirilir. Ancak, bu durumda, 0 “yanlış” ve Echo’nun ifadesi hiç yürümedi. Bir kez daha, bunun nedeni $ view_me_a_number’in belirlenmemesi veya mevcut olmaması değildir. Var – bu 0 değeri ile int – ama PHP koşullarında 0 sayısı olan şey PHP onu görmek ve “Bu yanlış” demektir.
İstediğimiz davranış bu değil: küçük cümleyimiz “0 dışındaki tüm sayılar değil, tüm sayılara 2 eklemelidir. Ne yanlış yapıyoruz? Biz çok özlü değildik ve yukarıda listelenen iki kuralı ihlal etmemizi sağladı. Bu ifadeyi kırabileceğiniz diğer tüm yolları bile tartışmayacağım, örneğin: $ vice_me_a_number = yeni stdclass; if ($ vice_me_a_number): $ new_number = $ GEÇ_ME_A_NUMBER + 2; Echo ‘Numara için teşekkürler. Artı 2 ‘. $ New_Number. ‘.’; // Ölümcül hata zamanı! Endif; Yani yukarıdaki PHP koşulları kötüdür. Nasıl daha iyi olabiliriz? İyi yazılmış koşullarla örnekler geri adım atalım: -kita olup olmadığını açıklamada ne sorarız? Gerçekten istediğimiz şey:
$ GIT_ME_A_NUMBER tanımlanmıştır ve:
$ GIT_ME_A_NUMBER aslında bir sayıdır.
İkinci kısım önemlidir. Bir sayı değilse, neden 2 eklemeye çalışıyoruz? Ona PHP: If (ISSET ($ Give_me_A_Number) && is_numeric ($ vice_me_number)): $ new_number = $ v birten_me_a_number + 2; Echo ‘Numara için teşekkürler. Artı 2 ‘. $ New_Number. ‘.’; Endif; Bu, bilmek istediğimiz iki şey sorarsa: ilk olarak, $ view_me_a_number tanımlanmış ve null değil; Ve ikincisi, $ vice_me_a_number sayısaldır.
Bu bilgi ile, PHP koşullarımıza ne verdiğimiz önemli değil – Jangk, String, Null, Nesne, dizi – her zaman tam olarak istendiği gibi çalışacaktır. Bir şeye önemli ölçüde 2 ekleyebilirseniz, içindeki kod çalışır ve yapamazsanız çalışmaz. Bunu uzun soluklu bir mucizeyle yapıyoruz: başka bir şey ima eden bir şey hakkında varsayımlara güvenmek yerine, kastettiğimiz her şeyi, sayfayı bir şeyden ilan edin. Başka bir deyişle, yazdığınız koşullarda her zaman sadece kısmen değil, tüm umutlarınızı açıkça ve tamamen belirlemeye çalışın. 2. Veri türünü önceden kontrol edin PHP gevşek olarak yazıldığından, PHP koşulunuz kullanmayı beklediğiniz veri türü hakkında çok net olmalıdır. Eğer bu şekilde yazmazsanız, kötü şeyler olabilir. İşte bir örnek. Örneğin, iki diziyi birleştirmek istiyorsak, kötü yazılmış gereksinimlerle, ikinci dizinin içinde öğeler bulunduğundan veya eklemeye değmediğinden emin olmalıyız. Bir dizinin bir sayım () kullandığını kaç öğe bulabiliriz, bu yüzden bir IF -kita ifadesine yazabiliriz. $ alışveriş_list = Array (‘portakal’, ‘muz’); $ new_list = Array (‘Çilek’); // If (count ($ new_list)): $ alışveriş_list = array_merge ($ alışveriş_listi, $ new_list); Endif; // Harika, şimdi alışveriş listemizi yazdırmaya hazırız! Foreach ($ List_item olarak $ alışveriş_list): echo $ list_item. ”; Endforeach;
Yukarıdaki kod “çilek muz portakalları” yazdıracak – yani doğru çalışıyor mu? Tam olarak değil. Bu, özellikle veri türü hakkında – ve bu nedenle çok kırılgan varsayımlara çok bağlıdır: $ alışveriş_list = array (‘turuncu’, ‘muz’); // $ new_list, “boş” bir şeyi göstermenin iyi bir yolu olan boş bir iptir … değil mi? $ new_list = ”; // If (count ($ new_list)): $ alışveriş_list = array_merge ($ alışveriş_listi, $ new_list); // Kötü Haber: Bu kod Endif’i çalıştıracak; // Şimdi ForEach ($ List_item olarak $ alışveriş_list) alışveriş listemizi yazdırmaya hazırız: echo $ list_item; Endforeach; // Sayfaya yazdırılan hiçbir şey bekleyin // Bekle ne oldu? var_dupp ($ alışveriş_list); // bu baskı null // uh oh burada ne oldu? Kesin bir nedenden dolayı o zaman iyi hissettiriyor, say (”); PHP’de 1 veya hata değil 1 döner. Eğer koşacaksak ve içinde her iki dizi olmayan iki şeyle asla eğlenceli olmayan array_merge () işini deneyeceğiz. Peki, dizeli bir dizi array_merge () olduğunuzda ne olur? NULL ALIN. Başka bir deyişle, nihayet birleştirmeye çalıştığımız orijinal diziyi yok ettik. İyi yazılmış koşullu örnekler daha iyi koddur: $ alışveriş_list = array (‘portakal’, ‘muz’); $ new_list = ”; // Hadi Çıldıralım // Aslında 0’dan fazla öğe olan bir dizi mi alıyoruz? if (is_array ($ new_list) && count ($ new_list)> 0): $ alışveriş_list = array_merge ($ alışveriş_listi, $ new_list); Endif; // harika, şimdi biz ‘
Alışveriş listemizi yazdırmaya hazır! Foreach ($ List_item olarak $ alışveriş_list): echo $ list_item. ”; Endforeach; Yukarıdaki sonuçlar “turuncu muz” olacak – null değil. Daha genel olarak, $ new_list olması gereken bir dizi olmadığında bu kod her zaman beklendiği gibi davranacaktır. Bu kod neden daha iyi? Çünkü IS_Array () Sınavı () $ New_List olabilecek şeyler hakkında bir fırsat sunmuyor. Bence bu da daha iyi, çünkü ayrıntılı sayım ($ new_list)> 0 kontrol ($ new_list). Bu şeyler benzer davranıyor, ama birinde ne demek istediğinizi söylüyorsunuz-“Bu dizinin 0’dan fazla öğeye sahip olduğundan emin olmak istiyorum”-ve diğerlerinde biraz kibirli olan Steno’ya güveniyorsunuz. PHP koşullu yapmayın. 3. Bir şey başka bir şeyle aynısa, gevşek eşitlikle uğraşmayın, o zaman bununla aynı olmalı, değil mi? Ha! Cevap elbette değil ve biz PHP programcıları artık gizlice Hawaii Punch’ımıza homurdanıyoruz. Gözlem: $ integer = 5; // Ben tamsayı 5. $ string = ‘5’; // Ben “5” diziyim. $ bool = $ integer == $ String; // bu php ‘
S gevşek eşdeğerlik testi. Bu iki şey eşit mi? // $ bool artık gerçek operatör == Gevşek eşitliği test etmek: veri türünü görmezden geldikten sonra iki şey aynı mı? Ayrıca! =, Gevşek Not-Equals var: Verilerin türünü görmezden geldikten sonra iki şey aynı değil mi? Sizin için belirsiz bir neden gibi geliyorsa, o zaman katılıyoruz – ve şimdi göstereceğimiz gibi her türlü potansiyel sonuça neden olabilir. Gevşek denklemlere (kaçının) örnekler, gevşek eşitlik ve bir sonraki Pora partisi kullanıyorsanız iki başarısızlık denetimi. $ integer = 5; $ string = ‘00005’; if ($ integer == $ string): echo ‘ne bekle’; // Bu kod çalışır, bu da kötü yankı strlen ($ string); // “5” echo strlen ($ integer) yazdırın; // “1” yazdırıyor // Sanırım o kadar eşit değiller. // ve neden bir tamsayı üzerinde strlen () çalıştırıyoruz? Endif; // Belki de sonuçta eşit değiller. Tekrar kontrol edelim. if ($ integer! = $ string): echo ‘tamam, iyi’; // Bu kod çalışmayacak, bu da kötü: echo ‘ne bekle’; // Bu kod çalışacak, ki bu kötü Endif; Sıkı eşitlik örnekleri (kullanım) İşte iki daha iyi PHP durumu: $ integer = 5; $ string = ‘00005’; if ($ integer === $ string): echo ‘ne bekle’; // Bu kod çalışmayacak, çünkü tamsayılar diziler Endif; // Yani eşit değil mi? ($ İnteger! == $ string): echo ‘tamam, iyi’; // Bu kod çalışacak, ki bu iyi: echo ‘ne bekle’; // Bu kod çalışmaz, bu da iyi Endif;