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?

Anónimo1
fuente
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' : '';
Dan Grossman
fuente
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.

Saad
fuente
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];
Ignacio Vazquez-Abrams
fuente
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
serdar.sanri
fuente
1
¡Gran respuesta, especialmente si necesitas exactamente ese booleano en JSON!
Bart
1
esta es la mejor respuesta
Shady Sherif
21

¿Intenta convertir tu booleano a entero?

 echo (int)$bool_val;
Yanick Rochon
fuente
Ja ... simple. Perfecto.
Mera Desarrollo
21

Me gusta este para imprimir eso

var_dump ($var);
akond
fuente
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
Jon Surrell
fuente
5

Esto da 0o 1:

intval($bool_val);

Manual PHP: función intval

David Oliver
fuente
Sí, "verdadero" no es un valor booleano (o un entero), sino una cadena.
David Oliver
4
echo(var_export($var)); 

Cuando $vares variable booleana, trueo falsese imprimirá.

mohamedeimo
fuente
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

Puedes usar un operador ternario

echo false ? 'true' : 'false';
Aaron Hathaway
fuente
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");
nuala
fuente
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}
Harry Pehkonen
fuente
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"
Oscar Zarrus
fuente
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;
AbraCadaver
fuente