PHP, if / else hataları

2 Cevap php

Ben kullanarak bir değişkeni karşılaştırmak eğer aşağıdaki PHP == bunu ben kullanmak eğer, != sonra benim kod tatili, birisi açıklamak ya da yardımcı olabilir beklediğiniz gibi mi çalışıyor?

$_GET['p'] = 'home';

// DOES NOT work, it will always return "show JS" regardless to what string I have
if ($_GET['p'] != 'home' || $_GET['p'] != 'create.account'){
    echo 'show JS';
}else{
    echo 'do not show JS';	
}

// Works as I would expect it to
if ($_GET['p'] == 'home' || $_GET['p'] == 'create.account'){
    echo 'do not show JS';
}else{
    echo 'show JS';	
}

2 Cevap

Sen olumsuzlama için DeMorgans Laws ile sorunu görebilirsiniz

!( A || B ) === (!A && !B)

Bu dize de karşılaştırıldığında dizeleri eşdeğer anlamına gelirdi çünkü hem tablolar yanlış olduğu için hiçbir yolu vardır çünkü vermek çözüm mümkün değildir. Her ikisi de yanlış olsaydı başka blok isabet olacağını tek yolu (çünkü OR deyim) 'dir.

    (X != A) ||  (X != B)
≡  !(X == A) || !(X == B)
≡ !((X == A) &&  (X == B))

(X == A) && (X == B) her zaman yanlış olduğu durum A != B ama X hem A ve B olamaz aynı anda . Yani !((X == A) && (X == B)) ve (X != A) || (X != B) her zaman doğrudur.