PHP - Ottieni bool che fa eco a falso quando è falso


172

Il codice seguente non stampa nulla:

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

Ma viene stampato il seguente codice 1:

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

C'è un modo migliore per stampare 0o falsequando $bool_valè falseche l'aggiunta di una ifdichiarazione?


5
Se questo è per il debug, prova var_dump invece di echo.
Mark E. Haase,

1
Il (bool)cast è ridondante, non c'è bisogno di lanciare bool a bool: (bool) true === true.
Jon Surrell,

C'è un modo per configurare PHP in modo che echo 0==1;output 0o false?
Mario

Risposte:


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

O se vuoi l'output solo quando è falso:

echo !$bool_val ? 'false' : '';

85
È confuso, tentacolare e inutile senza alcun beneficio apparente. Sto programmando da oltre 20 anni e non ho mai voluto che "falso" si convertisse automaticamente in bianco ... null molte volte, ma mai "falso". Il mio sviluppo Java / Spring / Hibernate è così molto più pulito e più forte dei sistemi PHP anche modesti. Ho trovato molte persone confuse .. stackoverflow.com/questions/9042002/… ma non sono riuscito a trovare alcun riferimento su un motivo reale per questa "caratteristica" di design.
Thomas W,

3
Volevo davvero discutere perché (stringa) FALSE == "" è una buona idea basata su questo bit dalla documentazione di PHP: "Un valore TRUE booleano viene convertito nella stringa" 1 ". Il valore FALSE booleano viene convertito in" "(il vuoto stringa). Ciò consente la conversione avanti e indietro tra valori booleani e stringa. " ma l'ho provato e (bool) anche "0" restituisce FALSO, quindi ... non lo so. Adoro PHP, ma non posso negare che sia un po 'strano> _>
Ben

7
Non è strano FALSE == ''. È perfettamente valido e parte di altre lingue, incluso JavaScript. La cosa strana è che per impostazione predefinita FALSO è una stringa vuota. Dovrebbe essere impostato su 0. Sempre. Soprattutto dal momento che VERO sarà sempre predefinito su 1. Ciò infrange una regola cardinale di programmazione. Mantieni il tuo codice coerente. Questo è chiaramente un bug.
Literphor

1
Mentre questo è il modo più semplice per farlo, eseguendo un array attraverso print_r che contiene valori booleani, tali valori verranno visualizzati vuoti a meno che non si esegua in precedenza l'array attraverso un ciclo che li scambia, quindi se si sta solo cercando di eseguire il debug o il log , diventa un dolore gigantesco al collo vedere se i valori sono effettivamente veri o falsi o qualcos'altro che sembra vuoto.
Dave Heq,

2
@Ben sebbene !! '0'valuti falsein PHP, è truein JS. !! ""è falso in JS e PHP.
Charlie,

64

Questo è il modo più semplice per farlo:

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

o

var_export($bool_value)

Se il secondo argomento non è vero, produrrà direttamente il risultato.


34

No, poiché l'altra opzione sta modificando il motore di Zend, e sarebbe difficile premerlo per chiamarlo "un modo migliore".

Modificare:

Se lo volessi davvero, potresti usare un array:

$boolarray = Array(false => 'false', true => 'true');
echo $boolarray[false];

3
È un modo strano per farlo, perché le chiavi dell'array non possono essere tipi bool. PHP eseguirà il cast dell'array (0 => 'false', 1 => 'true').
Mark E. Haase,

66
@mehaase: da tempo ho smesso di provare ad applicare qualsiasi tipo di logica alla gestione dei tipi di PHP. Lo prendo appena arriva.
Ignacio Vazquez-Abrams,

33

Questo stamperà il valore booleano così com'è, anziché 1/0.

    $bool = false;

    echo json_encode($bool);   //false

1
Ottima risposta, soprattutto se hai esattamente bisogno di quel booleano in JSON!
Bart il

1
questa è la risposta migliore
Shady Sherif


21

Mi piace questo per stamparlo

var_dump ($var);

15

var_export fornisce la funzionalità desiderata.

Questo stamperà sempre un valore anziché stampare nulla per nullo false. var_exportstampa una rappresentazione PHP dell'argomento passato, l'output potrebbe essere copiato / incollato nuovamente in 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'

Se vuoi stampare stringhe "true"o "false", puoi lanciare un valore booleano come di seguito, ma fai attenzione alle peculiarità:

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


4
echo(var_export($var)); 

Quando $varè una variabile booleana trueo falseverrà stampata.


Secondo me, la migliore soluzione quando si esportano variabili PHP in JavaScript!
RPDeshaies,

3
Questo è un po 'fuorviante. var_exportin questo caso echeggerà il suo risultato e restituirà null, quindi var_export sta emettendo il true || false, ed echoè echoing null( ''). Per restituire l'output da var_export, è necessario fornire un secondo parametro come true.
Jon Surrell,

@RPDeshaies se vuoi esportare variabili php in javascript json_encodeè un'opzione migliore.
andho,


3

L' %bopzione di sprintf () convertirà un valore booleano in un numero intero:

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

Se non ne hai familiarità: puoi assegnare a questa funzione una quantità arbitraria di parametri, mentre la prima dovrebbe essere la tua stringa di uscita aromatizzata con stringhe di sostituzione come %bo %sper la sostituzione generale delle stringhe.

Ogni modello verrà sostituito dall'argomento in ordine:

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");

2

json_encode lo farà immediatamente, ma non è carino (rientrato, ecc.):

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

... dà ...

{"whatever":true,"somethingelse":false}

0
function dump_condition($condition){
    if($condition){
        return "true";
    } else {
        return "false";
    }
 }

utilizzare su script

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

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

0

Stai lanciando un booleano in booleano e ti aspetti che venga visualizzato un numero intero. Funziona per truema non è falso. Poiché ti aspetti un numero intero:

echo (int)$bool_val;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.