PHP - Dapatkan bool untuk echo false saat false

172

Kode berikut tidak mencetak apa pun:

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

Tetapi kode berikut dicetak 1:

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

Apakah ada cara yang lebih baik untuk mencetak 0atau falsesaat $bool_valini falsedari menambahkan ifpernyataan?

Anonim1
sumber
5
Jika ini untuk debugging, coba var_dump alih-alih gema.
Mark E. Haase
1
The (bool)cor berlebihan, Anda tidak perlu bool cor ke bool: (bool) true === true.
Jon Surrell
Apakah ada cara untuk mengkonfigurasi PHP sehingga echo 0==1;menghasilkan 0atau false?
mario

Jawaban:

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

Atau jika Anda hanya ingin output ketika itu salah:

echo !$bool_val ? 'false' : '';
Dan Grossman
sumber
85
Ini membingungkan, luas & tidak membantu tanpa manfaat nyata. Saya telah pemrograman selama 20+ tahun dan tidak pernah saya ingin 'false' untuk secara otomatis mengkonversi ke kosong .. null berkali-kali, tetapi tidak pernah 'salah'. Pengembangan Java / Spring / Hibernate saya begitu jauh lebih bersih & lebih kuat daripada sistem PHP sederhana sekalipun. Saya dapat menemukan banyak orang yang bingung .. stackoverflow.com/questions/9042002/ ... tapi saya tidak dapat menemukan referensi apa pun alasan sesungguhnya untuk "fitur" desain ini.
Thomas W
3
Saya benar-benar ingin berdebat mengapa (string) FALSE == "" adalah ide yang baik berdasarkan bit ini dari dokumentasi PHP: "Nilai boolean BENAR dikonversi ke string" 1 ". Boolean FALSE dikonversi ke" "(kosong string). Ini memungkinkan konversi bolak-balik antara nilai boolean dan string. " tapi saya mengujinya, dan (bool) "0" juga mengevaluasi ke FALSE, jadi ... Saya tidak tahu. Saya suka PHP, tetapi saya tidak dapat menyangkal bahwa itu agak 'aneh> _>
Ben
7
Itu tidak aneh FALSE == ''. Ini sangat valid dan merupakan bagian dari bahasa lain, termasuk javascript. Yang aneh adalah default FALSE untuk string kosong. Seharusnya default ke 0. Selalu. Terutama karena TRUE akan selalu default ke 1. Ini melanggar aturan utama pemrograman. Pastikan kode Anda konsisten. Ini jelas bug.
Literphor
1
Meskipun ini adalah cara paling sederhana untuk melakukan ini, menjalankan array melalui print_r yang berisi nilai boolean, nilai-nilai itu akan kosong kecuali jika Anda sebelumnya menjalankan array melalui loop yang menukar mereka, jadi jika Anda hanya mencoba untuk debug atau log , itu menjadi sakit besar di leher untuk melihat apakah nilai-nilai itu benar atau salah atau sesuatu yang terlihat kosong.
Dave Heq
2
@Ben meskipun !! '0'dievaluasi falsedalam PHP, itu truedalam JS. !! ""salah dalam JS dan PHP.
Charlie
64

Ini adalah cara termudah untuk melakukan ini:

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

atau

var_export($bool_value)

Jika argumen kedua tidak benar, itu akan menampilkan hasilnya secara langsung.

Saad
sumber
34

Tidak, karena opsi lain adalah memodifikasi mesin Zend, dan orang akan kesulitan untuk menyebutnya sebagai "cara yang lebih baik".

Edit:

Jika Anda benar-benar ingin, Anda bisa menggunakan array:

$boolarray = Array(false => 'false', true => 'true');
echo $boolarray[false];
Ignacio Vazquez-Abrams
sumber
3
Itu cara yang aneh untuk melakukannya, karena kunci array tidak boleh tipe bool. PHP akan mengirimkannya ke array (0 => 'false', 1 => 'true').
Mark E. Haase
66
@mease: Saya sudah lama berhenti mencoba menerapkan segala jenis logika terhadap penanganan tipe PHP. Saya hanya menerimanya begitu saja.
Ignacio Vazquez-Abrams
33

Ini akan mencetak nilai boolean apa adanya, bukan 1/0.

    $bool = false;

    echo json_encode($bool);   //false
serdar.sanri
sumber
1
Jawaban yang bagus, terutama jika Anda benar-benar membutuhkan boolean di JSON!
bart
1
ini jawaban terbaik
Shady Sherif
21

Coba mengonversi boolean Anda menjadi bilangan bulat?

 echo (int)$bool_val;
Yanick Rochon
sumber
Hah ... sederhana. Sempurna.
Pengembangan Mere
21

Saya suka yang ini untuk mencetaknya

var_dump ($var);
akond
sumber
15

var_export menyediakan fungsionalitas yang diinginkan.

Ini akan selalu mencetak nilai daripada tidak mencetak apa pun untuk nullatau false. var_exportmencetak representasi PHP dari argumen yang dilewatinya, hasilnya bisa disalin / ditempelkan kembali ke 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'

Jika Anda ingin mencetak string "true"atau "false", Anda dapat menggunakan boolean seperti di bawah ini, tetapi waspadalah terhadap kekhasan:

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
sumber
5

Ini memberi 0atau 1:

intval($bool_val);

Manual PHP: fungsi intval

David Oliver
sumber
Ya, "true" bukan nilai boolean (atau bilangan bulat), tetapi sebuah string.
David Oliver
4
echo(var_export($var)); 

Kapan $varvariabel boolean, trueatau falseakan dicetak.

mohamedeimo
sumber
Menurut pendapat saya, solusi terbaik saat mengekspor variabel PHP dalam JavaScript!
RPDeshaies
3
Ini agak menyesatkan. var_exportdalam hal ini akan menggemakan hasilnya dan mengembalikan nol, sehingga var_export mengeluarkan true || false, dan echomenggema null( ''). Untuk mengembalikan output dari var_export, Anda harus menyediakan parameter kedua sebagai true.
Jon Surrell
@RPDeshaies jika Anda ingin mengekspor variabel php ke javascript json_encodeadalah opsi yang lebih baik.
andho
3

Anda dapat menggunakan operator ternary

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

The %bpilihan sprintf () akan mengkonversi boolean ke integer:

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

Jika Anda tidak terbiasa dengan itu: Anda dapat memberikan fungsi ini sejumlah parameter yang arbitrer, sedangkan yang pertama adalah string ouput Anda yang dibumbui dengan string pengganti seperti %batau %suntuk penggantian string umum.

Setiap pola akan diganti oleh argumen dengan urutan:

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

json_encode akan melakukannya di luar kotak, tetapi tidak cantik (berlekuk, dll):

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

... memberi ...

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

gunakan pada skrip

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

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

Anda akan melemparkan boolean ke boolean dan mengharapkan bilangan bulat ditampilkan. Ini bekerja untuk truetetapi tidak salah. Karena Anda mengharapkan bilangan bulat:

echo (int)$bool_val;
AbraCadaver
sumber