Obter bool para ecoar falso quando falso

172

O código a seguir não imprime nada:

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

Mas o seguinte código é impresso 1:

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

Existe uma maneira melhor de imprimir 0ou falsequando $bool_valé falseadicionar uma ifdeclaração?

Anônimo1
fonte
5
Se for para depuração, tente var_dump em vez de echo.
Mark E. Haase
1
O (bool)elenco é redundante, você não precisa bool elenco para bool: (bool) true === true.
Jon Surrell
Existe uma maneira de configurar o PHP para que as echo 0==1;saídas 0ou false?
Mario

Respostas:

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

Ou se você deseja apenas saída quando for falsa:

echo !$bool_val ? 'false' : '';
Dan Grossman
fonte
85
É confuso, extenso e inútil sem nenhum benefício aparente. Venho programando há mais de 20 anos e nunca quis que 'false' se convertesse automaticamente em branco ... null muitas vezes, mas nunca 'false'. Meu desenvolvimento Java / Spring / Hibernate é muito mais limpo e mais forte do que os modestos sistemas PHP. Eu pude encontrar muitas pessoas que estavam confusas .. stackoverflow.com/questions/9042002/… mas não consegui encontrar nenhuma referência a uma verdadeira razão para esse "recurso" de design.
Thomas W
3
Eu realmente queria discutir por que (string) FALSE == "" é uma boa idéia com base neste bit da documentação do PHP: "Um valor TRUE booleano é convertido na string" 1 ". Foolse booleano é convertido em" "(o vazio Isso permite a conversão entre os valores booleano e string. " mas eu testei e (bool) "0" também avalia como FALSE, então ... não sei. Eu amo PHP, mas não posso negar que isso é meio estranho> _>
Ben
7
Não é estranho isso FALSE == ''. É perfeitamente válido e faz parte de outras línguas, incluindo javascript. O que é estranho é o padrão FALSE para uma string vazia. Deve ser o padrão 0. Sempre. Especialmente porque TRUE sempre assumirá o padrão 1. Isso quebra uma regra fundamental da programação. Mantenha seu código consistente. Isso é claramente um bug.
Literphor
1
Embora essa seja a maneira mais simples de fazer isso, executando uma matriz por meio de print_r que contém valores booleanos, esses valores serão mostrados em branco, a menos que você execute a matriz anteriormente através de um loop que os troque, portanto, se você estiver apenas tentando depurar ou registrar , torna-se uma enorme dor no pescoço ver se os valores são realmente verdadeiros ou falsos ou algo mais que parece em branco.
Dave Heq
2
@ Ben, embora !! '0'avalie falseem PHP, está trueem JS. !! ""é falso em JS e PHP.
Charlie
64

Esta é a maneira mais fácil de fazer isso:

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

ou

var_export($bool_value)

Se o segundo argumento não for verdadeiro, ele produzirá o resultado diretamente.

Saad
fonte
34

Não, já que a outra opção é modificar o mecanismo do Zend, e seria difícil pressionar para chamar isso de "maneira melhor".

Editar:

Se você realmente quisesse, poderia usar uma matriz:

$boolarray = Array(false => 'false', true => 'true');
echo $boolarray[false];
Ignacio Vazquez-Abrams
fonte
3
Essa é uma maneira estranha de fazer isso, porque as chaves de matriz não podem ser do tipo booleano. O PHP converterá isso em array (0 => 'false', 1 => 'true').
Mark E. Haase
66
@ mehaase: Há muito tempo, parei de tentar aplicar qualquer tipo de lógica à manipulação de tipos do PHP. Eu apenas tomo como ele vem.
Ignacio Vazquez-Abrams
32

Isso imprimirá o valor booleano como está, em vez de 1/0.

    $bool = false;

    echo json_encode($bool);   //false
serdar.sanri
fonte
1
Ótima resposta, especialmente se você precisar exatamente desse booleano no JSON!
Bart
1
esta é a melhor resposta
Shady Sherif
21

Tente converter seu booleano em um número inteiro?

 echo (int)$bool_val;
Yanick Rochon
fonte
Hah ... simples. Perfeito.
Mere Development
21

Eu gosto deste para imprimir isso

var_dump ($var);
akond
fonte
15

var_export fornece a funcionalidade desejada.

Isso sempre imprimirá um valor em vez de imprimir nada para nullou false. var_exportimprime uma representação em PHP do argumento passado, a saída pode ser copiada / colada de volta no 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 você deseja imprimir strings "true"ou "false", pode converter para um booleano como abaixo, mas cuidado com as 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
fonte
5

Isso fornece 0ou 1:

intval($bool_val);

Manual do PHP: função intval

David Oliver
fonte
Sim, "true" não é um valor booleano (ou um número inteiro), mas uma string.
David Oliver
4
echo(var_export($var)); 

Quando $varé variável booleana trueou falseserá impressa.

mohamedeimo
fonte
Na minha opinião, a melhor solução ao exportar variáveis ​​PHP em JavaScript!
RPDeshaies
3
Isso é um pouco enganador. var_exportnesse caso, ecoará seu resultado e retornará nulo; portanto, var_export está exibindo o true || falsee echoestá ecoando null( ''). Para retornar a saída de var_export, você precisa fornecer um segundo parâmetro como true.
Jon Surrell
@RPDeshaies se você deseja exportar variáveis ​​php para javascript json_encodeé uma opção melhor.
andho
3

Você pode usar um operador ternário

echo false ? 'true' : 'false';
Aaron Hathaway
fonte
3

A %bopção de sprintf () converterá um booleano em um número inteiro:

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 você não estiver familiarizado com isso: você pode atribuir a essa função uma quantidade arbitrária de parâmetros, enquanto o primeiro deve ser sua string de saída temperada com strings de substituição como %bou%s para a substituição geral de strings.

Cada padrão será substituído pelo argumento na ordem:

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
fonte
2

O json_encode fará isso imediatamente, mas não é bonito (recuado, etc):

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

... dá ...

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

usar no script

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

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

Você está convertendo um booleano em booleano e esperando que um número inteiro seja exibido. Funciona para, truemas não para falso. Como você espera um número inteiro:

echo (int)$bool_val;
AbraCadaver
fonte