PHP - Lassen Sie bool false zurückgeben, wenn false

172

Der folgende Code druckt nichts aus:

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

Der folgende Code wird jedoch gedruckt 1:

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

Gibt es eine bessere Möglichkeit zum Drucken 0oder falsewann $bool_valist das falseHinzufügen einer ifAnweisung?

Anonymous1
quelle
5
Wenn dies zum Debuggen dient, versuchen Sie var_dump anstelle von echo.
Mark E. Haase
1
Die (bool)Besetzung ist redundant, Sie müssen nicht Bool zu Bool umwandeln : (bool) true === true.
Jon Surrell
Gibt es eine Möglichkeit, PHP so zu konfigurieren, dass echo 0==1;Ausgaben 0oder false?
Mario

Antworten:

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

Oder wenn Sie nur dann eine Ausgabe wünschen, wenn diese falsch ist:

echo !$bool_val ? 'false' : '';
Dan Grossman
quelle
85
Es ist verwirrend, weitläufig und nicht hilfreich, ohne dass ein offensichtlicher Nutzen daraus resultiert. Ich programmiere seit mehr als 20 Jahren und wollte nie , dass 'false' automatisch in blank konvertiert wird. Null oft, aber niemals 'false'. Meine Java / Spring / Hibernate-Entwicklung ist so viel sauberer und stärker als selbst bescheidene PHP-Systeme. Ich konnte viele Leute finden, die verwirrt waren. Stackoverflow.com/questions/9042002/…, aber ich konnte keinen Hinweis auf einen wirklichen Grund für dieses Design "Feature" finden.
Thomas W
3
Ich wollte wirklich argumentieren, warum (string) FALSE == "" eine gute Idee ist, basierend auf diesem Bit aus der PHP-Dokumentation: "Ein boolescher TRUE-Wert wird in den String" 1 "konvertiert. Boolean FALSE wird in" "(das leere) konvertiert string). Dies ermöglicht das Hin- und Herkonvertieren zwischen Booleschen und String-Werten. " aber ich habe es ausprobiert und (bool) "0" wird ebenfalls als FALSE ausgewertet, also ... ich weiß nicht. Ich liebe PHP, aber ich kann nicht leugnen, dass das irgendwie komisch ist> _>
Ben
7
Das ist nicht komisch FALSE == ''. Es ist vollkommen gültig und Teil anderer Sprachen, einschließlich Javascript. Was seltsam ist, ist, dass FALSE standardmäßig eine leere Zeichenfolge verwendet. Der Standardwert sollte 0 sein. Immer. Zumal TRUE immer standardmäßig 1 ist. Dies verstößt gegen eine Grundregel der Programmierung. Halten Sie Ihren Code konsistent. Dies ist eindeutig ein Fehler.
Literphor
1
Dies ist zwar die einfachste Methode, um ein Array über print_r auszuführen, das boolesche Werte enthält. Diese Werte werden jedoch leer angezeigt, es sei denn, Sie führen das Array zuvor über eine Schleife aus, die sie austauscht. Wenn Sie also nur versuchen, Fehler zu beheben oder zu protokollieren Es wird zu einem riesigen Schmerz im Nacken, zu sehen, ob die Werte tatsächlich wahr oder falsch sind oder etwas anderes, das leer aussieht.
Dave Heq
2
@ Ben wird zwar in PHP !! '0'ausgewertet false, aber truein JS. !! ""ist in JS und PHP falsch.
Charlie
64

Dies ist der einfachste Weg, dies zu tun:

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

oder

var_export($bool_value)

Wenn das zweite Argument nicht wahr ist, wird das Ergebnis direkt ausgegeben.

Saad
quelle
34

Nein, da die andere Option darin besteht, die Zend-Engine zu modifizieren, und es schwer fällt, dies als "besseren Weg" zu bezeichnen.

Bearbeiten:

Wenn Sie wirklich wollten, könnten Sie ein Array verwenden:

$boolarray = Array(false => 'false', true => 'true');
echo $boolarray[false];
Ignacio Vazquez-Abrams
quelle
3
Das ist eine seltsame Methode, da Array-Schlüssel keine Bool-Typen sein können. PHP wandelt das in ein Array um (0 => 'false', 1 => 'true').
Mark E. Haase
66
@mehaase: Ich habe vor langer Zeit aufgehört zu versuchen, irgendeine Art von Logik auf die Typverarbeitung von PHP anzuwenden. Ich nehme es einfach so wie es kommt.
Ignacio Vazquez-Abrams
32

Dadurch wird der boolesche Wert so ausgegeben, wie er ist, anstelle von 1/0.

    $bool = false;

    echo json_encode($bool);   //false
serdar.sanri
quelle
1
Tolle Antwort, besonders wenn Sie genau diesen Booleschen Wert in JSON benötigen!
Bart
1
Dies ist die beste Antwort
Shady Sherif
21

Versuchen Sie, Ihren Booleschen Wert in eine Ganzzahl umzuwandeln?

 echo (int)$bool_val;
Yanick Rochon
quelle
Hah ... einfach. Perfekt.
Bloße Entwicklung
21

Ich mag es, wenn dieser das ausdruckt

var_dump ($var);
akond
quelle
15

var_export bietet die gewünschte Funktionalität.

Dadurch wird immer ein Wert gedruckt, anstatt nichts für nulloder zu drucken false. var_exportGibt eine PHP-Darstellung des übergebenen Arguments aus. Die Ausgabe kann kopiert / wieder in PHP eingefügt werden.

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'

Wenn Sie Zeichenfolgen "true"oder drucken möchten "false", können Sie wie folgt in einen Booleschen Wert umwandeln. Beachten Sie jedoch die Besonderheiten:

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
quelle
5

Dies gibt 0oder 1:

intval($bool_val);

PHP-Handbuch: Intval-Funktion

David Oliver
quelle
Ja, "true" ist kein boolescher Wert (oder eine Ganzzahl), sondern eine Zeichenfolge.
David Oliver
4
echo(var_export($var)); 

Wann $varist eine boolesche Variable trueoder falsewird ausgedruckt?

mohamedeimo
quelle
Meiner Meinung nach die beste Lösung beim Exportieren von PHP-Variablen in JavaScript!
RPDeshaies
3
Das ist etwas irreführend. var_exportIn diesem Fall wird das Ergebnis wiedergegeben und null zurückgegeben, sodass var_export das ausgibt true || falseund echoechoing null( ''). Um die Ausgabe von zurückzugeben var_export, müssen Sie einen zweiten Parameter als angeben true.
Jon Surrell
@RPDeshaies, wenn Sie PHP-Variablen nach Javascript exportieren möchten, json_encodeist eine bessere Option.
Andho
3

Sie können einen ternären Operator verwenden

echo false ? 'true' : 'false';
Aaron Hathaway
quelle
3

Die %bOption sprintf () konvertiert einen Booleschen Wert in eine Ganzzahl:

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

Wenn Sie damit nicht vertraut sind: Sie können dieser Funktion eine beliebige Anzahl von Parametern zuweisen, während die erste Ihre Ausgangszeichenfolge sein sollte, die mit Ersatzzeichenfolgen wie %boder %sfür den allgemeinen Zeichenfolgenwechsel gewürzt ist .

Jedes Muster wird in der folgenden Reihenfolge durch das Argument ersetzt:

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
quelle
2

json_encode erledigt dies sofort, aber es ist nicht schön (eingerückt usw.):

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

... gibt ...

{"whatever":true,"somethingelse":false}
Harry Pehkonen
quelle
0
function dump_condition($condition){
    if($condition){
        return "true";
    } else {
        return "false";
    }
 }

Verwendung im Skript

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

echo dump_condition(1<0); // print "false"
Oscar Zarrus
quelle
0

Sie wandeln einen Booleschen Wert in einen Booleschen Wert um und erwarten, dass eine Ganzzahl angezeigt wird. Es funktioniert für, trueaber nicht falsch. Da Sie eine ganze Zahl erwarten:

echo (int)$bool_val;
AbraCadaver
quelle