Boole değeri PHP sayısal döner

5 Cevap php

EDIT: Ben karışıklık muhtemelen seçenek değeri için test ediyorum hangi sayfanın üstündeki bu kod tarafından oluşturulan inanıyorum ... Bu get_option ('seçeneği kullanmadan seçeneğine başvurmak için bir kısayol yöntemi oluşturur ') yöntemi ...

global $options;
foreach ($options as $value) {
if (get_settings( $value['id'] ) === FALSE) { 
        $$value['id'] = $value['std']; 
    } else { 
        $$value['id'] = get_settings( $value['id'] );
    }
}

Ben temanın seçenekleri panelinde işaretlenen bir onay kutusu aracılığıyla, bir değişken, $ myvar değerini ayarlamak ve worpdress benim options.php görüntülemek sonra, kaydetmek tıkladığınızda Ve böylece, değişken değeri

true

Ve ben kullanarak bu değişken üzerinde bir arama yaptığınızda

if($myvar == "true")

Bu geçer.

Ancak, ben bu yüzden gibi update_options () yöntemi, üzerinden doğrudan değerini ayarladığınızda ...

$mvar = true;
update_option('myvar', $myvar);

True 1 değer değişiklikler

Ben daha önce olduğu gibi aynı karşılaştırma yaptığınızda, if ($ myvar == "true"), şimdi başarısız olur. Bu "gerçek" artık.

Ne eksik? (1) Neden "doğru" ve 1, aynı değerlendirilmesi değil ve (2) UPDATE_OPTION yöntem 1'e true değerini değiştirmek için myvar değerine ne yapıyor?

5 Cevap

Denemek

if($myvar == true)

ve

$myvar = true;

TRUE ve FALSE are PHP's built in boolean variables which are much more universal than a true string.


UPDATE_OPTION hakkında. Bu seçeneği 1 olarak değişmekte olduğunu olmayabilir. Yerine o veritabanına eklerken, bu "true" dize olarak ekler ki olabilir. Geri geldiğinde o zaman, boolean değerine dönüştürülür true, hangi basılmış durumdur 1

Denemek

if ($myvar)

Şeyler doğru "eşit", onlar gerçek ya vardır ya da olup olmadığını test etmeyin.

Sen if($myvar == true) için ilk testi değiştirmek veya basitçe if ($myvar) olmalıdır. PHP "gerçek" ne için bazı tuhaf kurallar vardır; Genellikle, dizeleri false tipi döküm "0" özel durumlarda ve boş bir dize "", dışında, true değerlendiririz.

Belirli bir örnekte, if ($myvar == "true"),

  • $myvar, bir boolean varsa, sentezleme (bool) == (bool)"true" olarak değerlendirecek ya da (bool) == true
  • $myvar bir tamsayı içeriyorsa, bir dizeye döküm ve "gerçek" dize karşılaştırılır oluyor; Çünkü "1"! = "true" bu yüzden test, başarısız oluyor.
  • $myvar bir dize ise, dize karşılaştırması yer alır ve aniden sadece değişmez dize "gerçek" başarıyla karşılaştırmak olacaktır.

Wordpress olasılıkla "true" dan geri gönderilen zaman, bu yüzden test geçer dize $myval kuruyor: Ben 2. ve 3. durumlarda etkisi vardır tahmin ediyorum. El boolean belirlediğinizde true, Wordpress bir tamsayı dönüştürerek olmalı, ve tamsayı 1 dize döküm olacak, çünkü o zaman tamsayı karşılaştırması "1" kıyaslandığında karşı gerçekleşir ve başarısız "true".

Sen 1 tamsayı ve dize 'gerçek' arasında gevşek bir karşılaştırma yapıyoruz. Bu PHP bir sayıya dize çevirmek olacaktır için. Bir sayı olarak 'test', 0:

var_dump((int) 'true'); // int(0)

0 1'e eşit olmadığı ve karşılaştırma yanlış dönecektir.

Diğer bazı cevaplar zaten doğru bir şekilde işaret gibi, boolean literal TRUE veya true karşı test etmelisiniz. Bir eşitlik çek bir operatör bir boolean ise, PHP 1 numara için, verecek olan, çok bir mantıksal diğer operatöre dönüştürür

var_dump((bool) 1); // boolean(true)

True eşit olduğundan ve sonra test geçecek.

Type Comparison Table PHP türlerini juggles anlamak için check out zaman testing for equality.

check_update sizin mantıksala ne gelince, kontrol function description:

(Karışık) bu seçenek adını YENİ değeri (gerekli). Bu değer bir dize, bir dizi, bir nesne ya da tefrika değer olabilir.

Yani, hiçbir mantıksal izin verdi. Ben sourcecode dönüşüm gerçekleşir yerden bulmaya kısaca denedim, ama WP benim için bir karışıklık olduğundan, bulamadım. Veritabanına depolamak ve daha sonra geri alırken başkası önerdi gibi, muhtemelen olur.

"Gerçek" bir dize ve boolean 1 tüm dizeleri evaulates ((bool) $string döküm deneyin. true, diğer taraftan, tırnak işaretleri olmadan, bir boolean ve 1 değerlendirecek.