PHP - Pobierz bool, aby echo false, gdy false

172

Poniższy kod niczego nie drukuje:

$bool_val = (bool)false;
echo $bool_val;

Ale następujący kod drukuje 1:

$bool_val = (bool)true;
echo $bool_val;

Czy jest lepszy sposób na wydrukowanie 0lub falsekiedy $bool_valjest falseniż dodanie ifoświadczenia?

Anonimowy 1
źródło
5
Jeśli to służy do debugowania, spróbuj var_dump zamiast echo.
Mark E. Haase
1
(bool)Obsada jest zbędny, nie trzeba oddanych bool bool: (bool) true === true.
Jon Surrell
Czy istnieje sposób na skonfigurowanie PHP, aby echo 0==1;wyświetlało 0lub false?
mario

Odpowiedzi:

250
echo $bool_val ? 'true' : 'false';

Lub jeśli chcesz wyświetlać tylko wtedy, gdy jest fałszywe:

echo !$bool_val ? 'false' : '';
Dan Grossman
źródło
85
Jest to zagmatwane, rozległe i nieprzydatne bez widocznych korzyści. Programuję od ponad 20 lat i nigdy nie chciałem, aby słowo „fałsz” było automatycznie konwertowane na puste… wiele razy, ale nigdy „fałsz”. Mój rozwój Java / Spring / Hibernate jest o wiele czystszy i silniejszy niż nawet skromne systemy PHP. Mogłem znaleźć wiele osób, które były zdezorientowane… stackoverflow.com/questions/9042002/… ale nie mogłem znaleźć żadnego odniesienia do prawdziwego powodu tej „funkcji” projektu.
Thomas W,
3
Naprawdę chciałem się spierać, dlaczego (string) FALSE == "" jest dobrym pomysłem na podstawie tego fragmentu z dokumentacji PHP: "Wartość logiczna PRAWDA jest konwertowana na ciąg" 1 ". Wartość logiczna FALSE jest konwertowana na" "(pusty string). Pozwala to na konwersję między wartościami logicznymi i łańcuchowymi. " ale przetestowałem to i (bool) "0" również daje FALSE, więc ... nie wiem. Uwielbiam PHP, ale nie mogę zaprzeczyć, że to trochę dziwne> _>
Ben
7
To nie jest dziwne FALSE == ''. Jest całkowicie poprawny i jest częścią innych języków, w tym javascript. Dziwne jest to, że FALSE domyślnie przyjmuje pusty ciąg. Powinien mieć wartość domyślną 0. Zawsze. Zwłaszcza, że ​​TRUE zawsze będzie domyślnie równe 1. To łamie podstawową zasadę programowania. Zachowaj spójność kodu. To wyraźnie błąd.
Literphor
1
Chociaż jest to najprostszy sposób, aby to zrobić, uruchamiając tablicę przez print_r, która zawiera wartości logiczne, te wartości będą puste, chyba że wcześniej uruchomisz tablicę przez pętlę, która je zamieni, więc jeśli próbujesz tylko debugować lub rejestrować , ogromnym bólem w karku staje się sprawdzenie, czy wartości są rzeczywiście prawdziwe, czy fałszywe lub coś innego, co wygląda na puste.
Dave Heq
2
@Ben, chociaż !! '0'ocenia się na falsew PHP, jest truew JS. !! ""jest fałszem w JS i PHP.
Charlie
64

Oto najłatwiejszy sposób:

$text = var_export($bool_value,true);
echo $text;

lub

var_export($bool_value)

Jeśli drugi argument nie jest prawdziwy, wyświetli wynik bezpośrednio.

Saad
źródło
34

Nie, ponieważ drugą opcją jest modyfikacja silnika Zend i trudno byłoby nazwać to „lepszym sposobem”.

Edytować:

Jeśli naprawdę chcesz, możesz użyć tablicy:

$boolarray = Array(false => 'false', true => 'true');
echo $boolarray[false];
Ignacio Vazquez-Abrams
źródło
3
To dziwny sposób, ponieważ klucze tablic nie mogą być typami bool. PHP wyrzuci to na array (0 => 'false', 1 => 'true').
Mark E. Haase,
66
@mehaase: Już dawno przestałem próbować stosować jakąkolwiek logikę do obsługi typów w PHP. Po prostu przyjmuję to takim, jakim jest.
Ignacio Vazquez-Abrams,
32

Spowoduje to wydrukowanie wartości logicznej taką, jaka jest, zamiast 1/0.

    $bool = false;

    echo json_encode($bool);   //false
serdar.sanri
źródło
1
Świetna odpowiedź, zwłaszcza jeśli dokładnie potrzebujesz tego boolean w JSON!
bart
1
to najlepsza odpowiedź
Shady Sherif
21

Spróbuj przekonwertować wartość logiczną na liczbę całkowitą?

 echo (int)$bool_val;
Yanick Rochon
źródło
Hah ... proste. Idealny.
Mere Development
21

Podoba mi się ten, żeby to wydrukować

var_dump ($var);
akond
źródło
15

var_export zapewnia pożądaną funkcjonalność.

Spowoduje to zawsze wydrukowanie wartości zamiast drukowania niczego dla nulllub false. var_exportdrukuje reprezentację PHP przekazanego argumentu, wyjście może zostać skopiowane / wklejone z powrotem do PHP.

var_export(true);    // true
var_export(false);   // false
var_export(1);       // 1
var_export(0);       // 0
var_export(null);    // NULL
var_export('true');  // 'true'   <-- note the quotes
var_export('false'); // 'false'

Jeśli chcesz wydrukować ciągi "true"lub "false", możesz rzutować na wartość logiczną, jak poniżej, ale uważaj na osobliwości:

var_export((bool) true);   // true
var_export((bool) false);  // false
var_export((bool) 1);      // true
var_export((bool) 0);      // false
var_export((bool) '');     // false
var_export((bool) 'true'); // true
var_export((bool) null);   // false

// !! CAREFUL WITH CASTING !!
var_export((bool) 'false'); // true
var_export((bool) '0');     // false
Jon Surrell
źródło
5

To daje 0lub 1:

intval($bool_val);

Podręcznik PHP: funkcja intval

David Oliver
źródło
Tak, „prawda” nie jest wartością logiczną (lub liczbą całkowitą), ale ciągiem znaków.
David Oliver
4
echo(var_export($var)); 

Kiedy $varjest zmienną boolowską truelub falsezostanie wydrukowane.

mohamedeimo
źródło
Moim zdaniem najlepsze rozwiązanie przy eksporcie zmiennych PHP w JavaScript!
RPDeshaies
3
To jest trochę mylące. var_exportw tym przypadku wyświetli wynik i zwróci wartość null, więc var_export wypisuje true || falsei echowykonuje echo null( ''). Aby zwrócić dane wyjściowe z var_export, musisz podać drugi parametr jako true.
Jon Surrell
@RPDeshaies, jeśli chcesz eksportować zmienne php do javascript, json_encodejest lepszą opcją.
andho
3

Możesz użyć operatora trójskładnikowego

echo false ? 'true' : 'false';
Aaron Hathaway
źródło
3

%bMożliwość sprintf () konwertuje wartość logiczną do całkowitej:

echo sprintf("False will print as %b", false); //False will print as 0
echo sprintf("True will print as %b", true); //True will print as 1

Jeśli nie jesteś zaznajomiony z tym: możesz nadać tej funkcji dowolną liczbę parametrów, podczas gdy pierwszy z nich powinien być ciągiem wyjściowym doprawionym ciągami zastępczymi, takimi jak %blub %sdo ogólnej zamiany ciągów.

Każdy wzorzec zostanie zastąpiony argumentem w kolejności:

echo sprintf("<h1>%s</h1><p>%s<br/>%s</p>", "Neat Headline", "First Line in the paragraph", "My last words before this demo is over");
nuala
źródło
2

json_encode zrobi to zaraz po wyjęciu z pudełka, ale nie jest ładny (z wcięciem itp.):

echo json_encode(array('whatever' => TRUE, 'somethingelse' => FALSE));

... daje ...

{"whatever":true,"somethingelse":false}
Harry Pehkonen
źródło
0
function dump_condition($condition){
    if($condition){
        return "true";
    } else {
        return "false";
    }
 }

użyj w skrypcie

echo dump_condition(1>0); // print "true"

echo dump_condition(1<0); // print "false"
Oscar Zarrus
źródło
0

Rzucasz boolean na boolean i oczekujesz wyświetlenia liczby całkowitej. To działa, trueale nie jest fałszywe. Ponieważ oczekujesz liczby całkowitej:

echo (int)$bool_val;
AbraCadaver
źródło