2011-02-09 9 views
112

Por alguna razón, el código siguiente no se imprima nada:PHP - Obtener bool a la señal perturbadora cuando es falso

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

Pero los siguientes código imprime fuera 1:

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

¿Hay ¿una mejor manera de imprimir 0 o falso cuando $ bool_val es falso que agregar una instrucción if?

Editar: cambia segunda declaración de falso a verdadero

+5

Si esto es para la depuración, intente var_dump en lugar de echo. –

+1

El reparto '(bool)' es redundante, no es necesario convertir bool en bool: '(bool) true === true'. –

+0

¿Hay alguna manera de configurar PHP para que 'echo 0 == 1;' produzca '0' o' falso'? – mario

Respuesta

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

O si desea que sólo la salida cuando es falsa:

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

Es confuso, extenso e inútil sin ningún beneficio aparente. He estado programando durante más de 20 años y * nunca * he querido que 'falso' se convierta automáticamente en blanco ... nulo muchas veces, pero nunca 'falso'. Mi desarrollo de Java/Spring/Hibernate es mucho más limpio y más fuerte que incluso los sistemas PHP más modestos. ** Pude encontrar muchas personas confundidas .. ** http://stackoverflow.com/questions/9042002/php-printed-boolean-value-is-empty-why ** pero no pude encontrar ninguna referencia en cuanto a una "razón" real para esta "característica" de diseño. ** –

+1

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

+3

No es extraño que' FALSE == '' '. Es perfectamente válido y forma parte de otros idiomas, incluido javascript. Lo que es raro es que FALSE sea por defecto una cadena vacía. Por defecto debería ser 0. Siempre. Especialmente dado que TRUE siempre estará predeterminado a 1.Esto rompe una regla cardinal de programación. Mantenga su código constante. Esto es claramente un error. – Literphor

35

No, ya que la otra opción es modificar el motor Zend, y uno estaría en apuros para llamar a que una "mejor manera".

Editar:

Si realmente quisiera, podría utilizar 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 de tipo bool. PHP lo lanzará a la matriz (0 => 'falso', 1 => 'verdadero'). –

+63

@mehaase: hace mucho que dejé de intentar aplicar cualquier tipo de lógica al manejo de tipos de PHP. Solo lo tomo como viene. –

+1

@ IgnacioVazquez-Abrams la respuesta "Simplemente lo tomo como viene". fue simplemente épico. Upvoted por eso. – Ted

12

pruebas a convertir su booleano a un entero?

echo (int)$bool_val; 
2

Se puede utilizar un operador ternario

echo false ? 'true' : 'false'; 
18

I como éste para imprimir que fuera

var_dump ($var); 
43

Esta es la forma más sencilla de hacerlo:

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

o

var_export($bool_value) 

Si el segundo argumento no es cierto, es la salida el resultado directamente.

+0

¿Por qué no directamente 'var_export ($ bool_value);'? – Andy

+1

@Andy Apuesto a que ese segundo parámetro es lo que especifica si devuelves el valor, al igual que 'print_r ($ array, true);'. No estoy seguro de eso aunque –

+1

@KolobCanyon Check http://php.net/manual/en/function.var-export.php. Dice que el valor predeterminado para el segundo parámetro es 'falso'. Si es falso, lo generará directamente en lugar de devolver el valor. Entonces, ¿por qué no hacerlo directamente? – Andy

2

La opción de %bsprintf() convertirá un valor lógico 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: Usted puede dar a esta función una cantidad arbitraria de parámetros, mientras que el primero debe ser su cadena de salida especiada con cadenas de reemplazo como %b o %s para 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"); 
4
echo(var_export($var)); 

Cuando $var es variable booleana, true o false se imprimen.

+0

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

+2

Esto es un poco engañoso. 'var_export' en este caso hará eco de su resultado y devolverá nulo, por lo que var_export está generando el' verdadero || false', y 'echo' hace eco de' null' (''''). Para devolver la salida de 'var_export', debe proporcionar un segundo parámetro como' true'. –

+0

@RPDeshaies si quieres exportar variables php a javascript 'json_encode' es una mejor opción. – andho

1

json_encode lo hará fuera de la caja, pero no es bastante (sangría, etc.):

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

... da ...

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

En mi opinión, la mejor manera de lograr el resultado deseado es con var_export.

Esto hará siempre impresión de un valor (y no en silencio ocultar null o false), pero le dará información sobre lo que está imprimiendo. var_export le dice qué valor tiene, intenta literalmente imprimir su valor para que pueda copiar/pegar el resultado 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' 

Por supuesto, si usted quiere estrictamente una cadena "booleano", puede convertir a un valor lógico como en el siguiente ejemplo, pero tenga cuidado con "trampas" casting!

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 
0
function dump_condition($condition){ 
    if($condition){ 
     return "true"; 
    } else { 
     return "false"; 
    } 
} 

su uso en la escritura

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

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

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

$bool = false; 

    echo json_encode($bool); //false 
+0

Esto es en mi humilde opinión la mejor respuesta, ya que es el más flexible y más fácil –

Cuestiones relacionadas