5

Bu belki cevaplamak için acı temel sorudur ama PHP'nin kontrol etmek != eşit ise karşı !== özdeş ise akışını kullanarak ilgili performans sorunları hakkında merak ediyorum. o kullanmak tercih edilir,

<?php 
function test_json($json = NULL) { 
    if ($json != NULL) { 
    echo 'You passed some JSON.'; 
    } else { 
    echo 'You failed to pass any JSON.'; 
    } 
} 
?> 

bir performans açısından bakıldığında ise aynı (!==) geçerli bir karşılaştırma bulmaya çalışırken, değişken türleri üzerinden yineleme PHP önlemek için:

aşağıdaki önemsiz PHP işlevi düşünün?

ben ilk değişken türlerini karşılaştırır ve bu başarısız olursa, hemen FALSE döndüren!== farz ? PHP3'ten beri neredeyse bir refleks olarak != kullanıyorum. Şimdi çok daha hesaplamalı yoğun projeler üzerinde çalışıyorum, dakika performans değerlendirmeleri bir endişe daha haline gelir.

Akış kontrolü optimizasyonu hakkındaki diğer yorumlar elbette hoş geldiniz!

Ben sıkı bir karşılaştırma operatörleri vs gevşek herhangi bir performans testleri yapmadım ama yapmaya çalışıyorsun ne için, ben yerine http://www.php.net/manual/en/function.is-null.php

de is_null() üzerinde

if (!is_null($json)) { 
    do_stuff() 
} 

Daha bilgi gibi bir şey öneriyoruz

+1

, profilleme da deneyin. Bu, işlev çağrısı ile karşılaştırıldığında önemli olmayacaktır. – mario

+0

@mario Yup. Bir fonksiyon yazarken (alışkanlıklarımı sorguladığımda) fikir aklıma gelince, karşılaştırma operatörünü merak ediyorum. – msanford

cevap

7

DÜZENLEME: Yukarıda bağlandığım php sayfasının yorumlarındaki bir notun, === operatörünün her ikisi de is_null()'dan daha hızlı olan == operatöründen biraz daha hızlı olduğunu gösteren bazı sonuçlar vardır. Ancak başka bir not, "=== NULL ve is_null arasındaki yürütme süresi farkı 250 nanosaniyeden daha az. Önemli olan bir şeyi optimize et." Orada anlaşmak zorundayım. Yani tüm söylediklerim, en okunaklı olarak gördüğünüz şeylerle gitmenizi öneririm.

+1

+1, 1 000 000 karşılaştırmasıyla bir testi çalıştırarak bir değeri "NULL" ile karşılaştırarak ; '==', '===' ve 'is_null()', bunu anlıyorum '==' ve '===' kabaca aynıdır === 'olmak * hafif * daha hızlı ve' is_null() ' iki katı zaman alıyor. Bununla birlikte, kişisel bir zevk meselesi olarak, ben '' is_null() 'ı daha az, 'NULL == NULL' 'false' '(* değil, *) ve' is_null()' ı tercih etmeyi tercih ederim. – zrvan

+0

'NULL == NULL' hakkında mükemmel nokta. Bu sebepten dolayı mümkün olan yerlerde bir dilde yer alan fonksiyonların yanına geçme eğilimindeyim: daha önce hiç düşünmeyeceğim, daha az hata ayıklama anlamına gelen garip köşe durumlarını düzgün bir şekilde kullanmaları muhtemeldir. –

+0

Harika puan. Herkese teşekkürler! – msanford