Bir Strings sıkı karşılaştırma kullanmalı mıyım?

2 Cevap php

Ben kullanarak, örneğin biliyorum:

if (in_array('...'), array('.', '..', '...') === true)

Over:

if (in_array('...'), array('.', '..', '...') == true)

Performansını arttırmak ve (örneğin, gerçek 1 == gibi) bazı yaygın hatalardan kaçınmak gibi dizeleri, sıkı karşılaştırmalar kullanmak için bir neden yoktur, ancak ben merak ediyorum Can:

if ('...' === '...')

Gibi tam olarak aynı şeyi yapmak gibi görünüyor:

if ('...' == '...')

Birisi bu konuya biraz ışık getirebilir eğer bunu takdir ediyorum.

2 Cevap

Eğer biliyorsanız değerlerin hem dizeleri olması garanti edilir, daha sonra == ve === ikisi arasındaki tek fark bu yana aynıdır === görmek için denetler olduğunu türleri aynı değil, sadece etkin değerler ise.

Örneğin, $ _GET ve $ _POST değişkenler gibi şeyler - Ancak, bazı durumlarda, bir değer bir dize olacak emin bilmiyorum. Aşağıdaki düşünün:

$_GET['foo'] == ""

foo, boş bir dize olarak kabul edildi ise, yukarıda ifade doğru değerlendirecek, ama aynı zamanda gerçek değerlendirecek eğer hiçbir değer hiç foo için kabul edildi < / em>. Bunun aksine,

$_GET['foo'] === ""

$_GET['foo'], boş bir dize eşdeğer olabilir, ama aslında bu endeks için boş bir değeri olacaktır beri tip olmaz aksi takdirde değeri - boş bir dize açıkça geçildi ise tek gerçek değerlendirecek değil, bir dize.

Eğer birini kullanabilirsiniz veya diğer katı karşılaştırma seçtiğinizde, çünkü:

  1. Daha iyi performans var
  2. Bu beklenmedik sonuçlar önler

Bir dize boş olabilir ya sizce bir değişken aslında bir dize olduğundan yine de beklenmedik sonuçları olabilir dizeleri kıyaslarken değildir.

Her zaman DOĞRU veya YANLIŞ olarak azalabilir çünkü iki dize hazır karşılaştırmasını kullanmak asla. Örneğin:

if ('...' === '...')

aynıdır

if (TRUE)

Yani her zaman en az bir değişken karşılaştırma olacağından size beklenmedik sonuçları olabilir varsayalım gerekir.

Sen http://net-beta.net/ubench/ çeşitli sıkı vs gevşek karşılaştırmalar benchmark sonuçlarını görebilirsiniz. Ben de kendi testlerini koştu ve aynı sonuçları bulduk.

Bu bir fark yapmak için gitmiyorum çünkü varolan kodu değiştirmeden gitmek gerekir anlamına gelir, bir mikro optimizasyonu, ancak yeni kod yazıyorsanız, siz de en verimli teknikleri kullanarak pratik olabilir.