2008-08-05 5 views
22

Próbuję ustawić flagę, aby pokazać lub ukryć element strony, ale zawsze wyświetla się, nawet jeśli wyrażenie jest fałszywe.Dlaczego moje potrójne wyrażenie nie działa?

$canMerge = ($condition1 && $condition2) ? 'true' : 'false'; 
... 
<?php if ($canMerge) { ?>Stuff<?php } ?> 

Co słychać?

Odpowiedz

38

Jest to zepsute, ponieważ "false" jako ciąg będzie wartością true jako boolean.

Jest to niepotrzebne potrójne wyrażenie, ponieważ wynikowe wartości są proste i prawdziwe. Byłoby to równoważne:

$canMerge = ($condition1 && $condition2); 
2

Wartość "fałsz" jest prawdziwa. Musisz usunąć cytaty:

$canMerge = ($condition1 && $condition2) ? true : false; 
+1

więc wydaje się to niczym reputacji hodowli próbie. Użytkownik 3k-rep, który nie potrafi odróżnić łańcucha znaków od znaku logicznego, który odpowiada na pytanie w minutę po jego wykonaniu? – moo

+3

Dzięki za komentarze Orlando i Ed. To był problem, który mnie zaskoczył i opublikowałem go dla mnie i dla innych. Odpowiadanie na własne pytania jest całkowicie w porządku na FAQ. Może powinieneś przeczytać to jeszcze raz, jeśli minęło trochę czasu ... – Polsonby

0

Wydaje mi się rozsądne pytanie, szczególnie ze względu na rozbieżność w sposobie działania PHP.

Na przykład, następujący kod wypisze 'jego fałszywe'

$a = '0'; 

if($a) 
{ 
    echo 'its true'; 
} 
else 
{ 
    echo 'its false'; 
} 
-1
$canMerge = ($condition1 && $condition2); 

następnie

if ($canMerge){ 
    echo "Stuff"; 
} 
+0

To nie wyjaśnia, czym właściwie jest problem, o co poprosił OP. –