PHP - Obtener bool para hacer eco falso cuando es falso


172

El siguiente código no imprime nada:

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

Pero se imprime el siguiente código 1:

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

¿Hay una mejor manera de imprimir 0o falsecuándo $bool_vales falseque agregar una ifdeclaración?


55
Si esto es para depurar, intente var_dump en lugar de echo.
Mark E. Haase

1
El (bool)reparto es redundante, no es necesario bool bool fundido a: (bool) true === true.
Jon Surrell

¿Hay alguna manera de configurar PHP para que echo 0==1;salga 0o false?
mario

Respuestas:


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

O si solo desea la salida cuando es falsa:

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

85
Es confuso, extenso e inútil sin ningún beneficio aparente. He estado programando durante más de 20 años y nunca quise que 'falso' se convirtiera automáticamente a blanco ... nulo muchas veces, pero nunca 'falso'. Mi desarrollo Java / Spring / Hibernate es mucho más limpio y fuerte que incluso sistemas PHP modestos. Pude encontrar muchas personas que estaban confundidas ... stackoverflow.com/questions/9042002/… pero no pude encontrar ninguna referencia en cuanto a una razón real de esta "característica" de diseño.
Thomas W

3
Realmente quería discutir por qué (string) FALSE == "" es una buena idea basada en este bit de la documentación de PHP: "Un valor booleano VERDADERO se convierte en la cadena" 1 ". Boolean FALSE se convierte en" "(el vacío cadena). Esto permite la conversión de ida y vuelta entre valores booleanos y de cadena ". pero lo probé y (bool) "0" también se evalúa como FALSO, así que ... no sé. Me encanta PHP, pero no puedo negar que eso es un poco extraño> _>
Ben

77
No es raro eso FALSE == ''. Es perfectamente válido y forma parte de otros idiomas, incluido JavaScript. Lo extraño es que FALSE está predeterminado en una cadena vacía. Debería estar por defecto en 0. Siempre. Especialmente porque VERDADERO siempre será predeterminado a 1. Esto rompe una regla cardinal de programación. Mantenga su código consistente. Esto es claramente un error.
Literphor

1
Si bien esta es la forma más sencilla de hacerlo, ejecutando una matriz a través de print_r que contiene valores booleanos, esos valores se mostrarán en blanco a menos que ejecute previamente la matriz a través de un bucle que los intercambia, por lo que si solo está tratando de depurar o iniciar sesión , se convierte en un dolor gigante en el cuello para ver si los valores son realmente verdaderos o falsos o algo más que se ve en blanco.
Dave Heq

2
@Ben, aunque se !! '0'evalúa falseen PHP, está trueen JS. !! ""es falso en JS y PHP.
Charlie

64

Esta es la forma más fácil de hacer esto:

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

o

var_export($bool_value)

Si el segundo argumento no es verdadero, generará el resultado directamente.


34

No, ya que la otra opción es modificar el motor Zend, y sería difícil llamarlo "una mejor manera".

Editar:

Si realmente quisieras, podrías usar una matriz:

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

3
Esa es una forma extraña de hacerlo, porque las claves de matriz no pueden ser tipos bool. PHP lo convertirá en una matriz (0 => 'falso', 1 => 'verdadero').
Mark E. Haase

66
@mehaase: Hace mucho que dejé de intentar aplicar cualquier tipo de lógica para el manejo de tipos de PHP. Solo lo tomo como viene.
Ignacio Vazquez-Abrams

33

Esto imprimirá el valor booleano tal como es, en lugar de 1/0.

    $bool = false;

    echo json_encode($bool);   //false

1
¡Gran respuesta, especialmente si necesitas exactamente ese booleano en JSON!
Bart

1
esta es la mejor respuesta
Shady Sherif


21

Me gusta este para imprimir eso

var_dump ($var);

15

var_export Proporciona la funcionalidad deseada.

Esto siempre imprimirá un valor en lugar de imprimir nada para nullo false. var_exportimprime una representación PHP del argumento que se pasa, la salida podría copiarse / pegarse nuevamente en 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 desea imprimir cadenas "true"o "false", puede emitir un booleano como se muestra a continuación, pero tenga cuidado con las peculiaridades:

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

Cuando $vares variable booleana, trueo falsese imprimirá.


En mi opinión, ¡la mejor solución al exportar variables PHP en JavaScript!
RPDeshaies

3
Esto es un poco engañoso. var_exporten este caso, hará eco de su resultado y devolverá nulo, por lo que var_export está generando el true || false, y echoestá haciendo eco null( ''). Para devolver la salida de var_export, debe proporcionar un segundo parámetro como true.
Jon Surrell

@RPDeshaies si desea exportar variables php a javascript json_encodees una mejor opción.
andho


3

La %bopción de sprintf () convertirá un booleano en un entero:

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 no está familiarizado con él: puede darle a esta función una cantidad arbitraria de parámetros, mientras que el primero debe ser su cadena de salida condimentada con cadenas de reemplazo como %bo%s para el reemplazo general de cadenas.

Cada patrón será reemplazado por el argumento en orden:

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 hará listo para usar, pero no es bonito (sangrado, etc.):

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

...da...

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

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

utilizar en script

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

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

0

Estás convirtiendo un booleano en booleano y esperando que se muestre un entero. Funciona truepero no es falso. Como esperas un número entero:

echo (int)$bool_val;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.