PHP - Obtenir booléen pour écho false quand false

172

Le code suivant n'imprime rien:

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

Mais le code suivant s'imprime 1:

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

Y a-t-il une meilleure façon d'imprimer 0ou falsequand $bool_valest-ce falseque d'ajouter une ifdéclaration?

Anonyme1
la source
5
Si c'est pour le débogage, essayez var_dump au lieu de echo.
Mark E. Haase
1
Le (bool)casting est redondant, vous ne avez pas besoin de fonte bool bool: (bool) true === true.
Jon Surrell
Existe-t-il un moyen de configurer PHP pour que les echo 0==1;sorties 0ou false?
mario

Réponses:

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

Ou si vous ne voulez une sortie que lorsqu'elle est fausse:

echo !$bool_val ? 'false' : '';
Dan Grossman
la source
86
C'est déroutant, tentaculaire et inutile sans aucun avantage apparent. Je programme depuis plus de 20 ans et je n'ai jamais voulu que «faux» se convertisse automatiquement en blanc. Null plusieurs fois, mais jamais «faux». Mon développement Java / Spring / Hibernate est tellement plus propre et plus puissant que les systèmes PHP, même modestes. Je pourrais trouver beaucoup de gens qui étaient confus .. stackoverflow.com/questions/9042002/ ... mais je n'ai trouvé aucune référence quant à une vraie raison de cette "fonctionnalité" de conception.
Thomas W
3
Je voulais vraiment expliquer pourquoi (string) FALSE == "" est une bonne idée basée sur ce bit de la documentation PHP: "Une valeur booléenne TRUE est convertie en chaîne" 1 ". Boolean FALSE est converti en" "(le vide string). Cela permet la conversion entre les valeurs booléennes et chaîne. " mais je l'ai testé, et (booléen) "0" évalue également FALSE, donc ... je ne sais pas. J'adore PHP, mais je ne peux pas nier que c'est un peu bizarre> _>
Ben
7
Ce n'est pas bizarre ça FALSE == ''. Il est parfaitement valide et fait partie d'autres langages, y compris javascript. Ce qui est étrange, c'est que FALSE est par défaut une chaîne vide. Il doit être par défaut à 0. Toujours. D'autant plus que TRUE sera toujours par défaut à 1. Cela enfreint une règle cardinale de la programmation. Gardez votre code cohérent. C'est clairement un bug.
Literphor
1
Bien que ce soit le moyen le plus simple de le faire, exécuter un tableau via print_r qui contient des valeurs booléennes, ces valeurs seront vides à moins que vous n'exécutiez précédemment le tableau via une boucle qui les échange, donc si vous essayez simplement de déboguer ou de consigner , cela devient une énorme douleur dans le cou pour voir si les valeurs sont réellement vraies ou fausses ou quelque chose d'autre qui semble vide.
Dave Heq
2
@Ben bien !! '0'qu'évalué falseen PHP, il est trueen JS. !! ""est faux en JS et PHP.
Charlie
64

Voici la manière la plus simple de procéder:

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

ou

var_export($bool_value)

Si le deuxième argument n'est pas vrai, il affichera le résultat directement.

Saad
la source
34

Non, puisque l'autre option est de modifier le moteur Zend, et on aurait du mal à appeler cela une «meilleure façon».

Éditer:

Si vous le souhaitez vraiment, vous pouvez utiliser un tableau:

$boolarray = Array(false => 'false', true => 'true');
echo $boolarray[false];
Ignacio Vazquez-Abrams
la source
3
C'est une façon étrange de le faire, car les clés de tableau ne peuvent pas être des types booléens. PHP le transtypera en tableau (0 => 'faux', 1 => 'vrai').
Mark E. Haase
66
@mehaase: J'ai depuis longtemps arrêté d'essayer d'appliquer toute sorte de logique à la gestion des types de PHP. Je prends ça comme ça vient.
Ignacio Vazquez-Abrams
33

Cela affichera la valeur booléenne telle quelle, au lieu de 1/0.

    $bool = false;

    echo json_encode($bool);   //false
serdar.sanri
la source
1
Excellente réponse, surtout si vous avez exactement besoin de ce booléen en JSON!
bart
1
c'est la meilleure réponse
Shady Sherif
21

Essayez de convertir votre booléen en entier?

 echo (int)$bool_val;
Yanick Rochon
la source
Hah ... simple. Parfait.
Mere Development
21

J'aime celui-ci pour l'imprimer

var_dump ($var);
Akond
la source
15

var_export fournit la fonctionnalité souhaitée.

Cela imprimera toujours une valeur plutôt que de ne rien imprimer pour nullou false. var_exportimprime une représentation PHP de l'argument passé, la sortie peut être copiée / collée dans 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'

Si vous souhaitez imprimer des chaînes "true"ou "false", vous pouvez effectuer un cast en booléen comme ci-dessous, mais méfiez-vous des particularités:

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
la source
5

Cela donne 0ou 1:

intval($bool_val);

Manuel PHP: fonction intval

David Oliver
la source
Oui, "true" n'est pas une valeur booléenne (ou un entier), mais une chaîne.
David Oliver
4
echo(var_export($var)); 

Quand $varest une variable booléenne trueou falsesera imprimé.

mohamedeimo
la source
À mon avis, la meilleure solution lors de l'exportation de variables PHP en JavaScript!
RPDeshaies
3
C'est un peu trompeur. var_exportdans ce cas, il fera écho à son résultat et retournera null, donc var_export affiche le true || false, et echoest echoing null( ''). Pour renvoyer la sortie de var_export, vous devez fournir un second paramètre sous la forme true.
Jon Surrell
@RPDeshaies si vous souhaitez exporter des variables php vers javascript json_encodeest une meilleure option.
andho
3

Vous pouvez utiliser un opérateur ternaire

echo false ? 'true' : 'false';
Aaron Hathaway
la source
3

L' %boption de sprintf () convertira un booléen en entier:

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

Si vous n'êtes pas familier avec cela: vous pouvez donner à cette fonction une quantité arbitraire de paramètres tandis que le premier devrait être votre chaîne de sortie épicée avec des chaînes de remplacement comme %bou %spour un remplacement général de chaîne.

Chaque motif sera remplacé par l'argument dans l'ordre:

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
la source
2

json_encode le fera prêt à l'emploi, mais ce n'est pas joli (indenté, etc.):

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

... donne ...

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

utiliser sur le script

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

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

Vous convertissez un booléen en booléen et vous attendez à ce qu'un entier soit affiché. Cela fonctionne pour truemais pas faux. Puisque vous attendez un entier:

echo (int)$bool_val;
AbraCadaver
la source