Yanlış olduğunda yankılamak için bool alın


172

Aşağıdaki kod hiçbir şey yazdırmıyor:

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

Ancak aşağıdaki kod yazdırılır 1:

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

Yazdırmak için daha iyi bir yolu var mı 0veya falsene zaman $bool_valolduğunu falsebir eklemekten daha ifdeyimi?


5
Bu hata ayıklama içinse, echo yerine var_dump komutunu deneyin.
Mark E. Haase

1
(bool)Dökme Eğer bool için dökme bool gerekmez, gereksiz: (bool) true === true.
Jon Surrell

Böylece yapılandırmak PHP için bir yol var mı echo 0==1;çıkışları 0veya false?
mario

Yanıtlar:


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

Veya yalnızca yanlış olduğunda çıktı almak istiyorsanız:

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

85
Belirgin bir faydası olmadan kafa karıştırıcı, genişleyen ve yararsızdır. Ben 20 + yıldır programlama ve asla boş 'otomatik dönüştürmek için' yanlış 'istedim .. birçok kez null, ama asla' yanlış '. Java / Spring / Hibernate geliştirmem, mütevazı PHP sistemlerinden bile çok daha temiz ve güçlü. Kafası karışmış birçok insan bulabildim .. stackoverflow.com/questions/9042002/… ama bu tasarım "özelliği" için gerçek bir neden ile ilgili herhangi bir referans bulamadım .
Thomas W

3
Gerçekten neden (string) FALSE == "" PHP belgelerinden bu bit dayalı iyi bir fikir olduğunu iddia etmek istedim: "Boole TRUE değeri" 1 "dizesine dönüştürülür. Boolean FALSE" "(boş Bu, boole ve dize değerleri arasında ileri geri dönüşüme izin verir. " ama test ettim ve (bool) "0" da YANLIŞ olarak değerlendirildi, yani ... Bilmiyorum. PHP'yi seviyorum, ama bunun 'tuhaf> _> gibi olduğunu inkar edemem
Ben

7
Bu garip değil FALSE == ''. Tamamen geçerli ve javascript de dahil olmak üzere diğer dillerin bir parçası. Garip olan FALSE varsayılan olarak boş bir dizgidir. Varsayılan 0 olmalıdır. Her zaman. Özellikle TRUE her zaman varsayılan olarak 1'e ayarlanacağı için, bu temel bir programlama kuralını ihlal eder. Kodunuzu tutarlı tutun. Bu açıkça bir hatadır.
Literphor

1
Boolean değerleri içeren print_r aracılığıyla bir dizi çalıştırmak, bunu yapmanın en basit yolu olsa da, diziyi daha önce onları değiştiren bir döngü aracılığıyla çalıştırmadığınız sürece bu değerler boş görünür, bu nedenle yalnızca hata ayıklamaya veya günlüğe kaydetmeye çalışıyorsanız , değerlerin gerçekten doğru mu yanlış mı yoksa boş görünen başka bir şey olup olmadığını görmek boyunda dev bir ağrı haline gelir.
Dave Heq

2
@Ben PHP'de !! '0'değerlendirmesine rağmen JS'de. JS ve PHP'de yanlış. falsetrue!! ""
Charlie

64

Bunu yapmanın en kolay yolu:

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

veya

var_export($bool_value)

İkinci argüman doğru değilse, sonucu doğrudan çıktılar.


34

Hayır, diğer seçenek Zend motorunu değiştirdiğinden ve buna "daha iyi bir yol" adını vermek zor olurdu.

Düzenle:

Gerçekten isterseniz, bir dizi kullanabilirsiniz:

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

3
Bunu yapmak garip bir yol, çünkü dizi anahtarları bool türleri olamaz. PHP bunu diziye gönderir (0 => 'false', 1 => 'true').
Mark E. Haase

66
@mehaase: Ben uzun zaman önce PHP'nin tür işleme doğru her türlü mantığı uygulamaya çalışmayı bıraktım. Sadece geldiği gibi alıyorum.
Ignacio Vazquez-Abrams

32

Bu, 1/0 yerine boole değerini yazdırır.

    $bool = false;

    echo json_encode($bool);   //false

1
Büyük cevap, özellikle JSON'da tam olarak bu boole ihtiyacınız varsa!
bart

1
en iyi cevap bu
Shady Sherif


21

Bunu yazdırmak için beğendim

var_dump ($var);

15

var_export istenen işlevselliği sağlar.

Bu, veya için hiçbir şey yazdırmak yerine her zaman bir değer yazdırır . iletildiği argümanın bir PHP temsilini yazdırır, çıktı kopyalanabilir / tekrar PHP'ye yapıştırılabilir.nullfalsevar_export

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'

Dizeleri yazdırmak istiyorsanız "true"veya "false"aşağıdaki gibi bir boole yazabilirsiniz, ancak özelliklere dikkat edin:

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

Tüm $varBoole değişkendir, trueya da falsebasılacaktır.


Bence, PHP'de PHP değişkenlerini dışa aktarırken en iyi çözüm!
RPDeshaies

3
Bu biraz yanıltıcı. var_exportBu durumda var_export çıkaran yüzden, onun sonucu ve dönüş null adlı yankılanacak true || falseve echoyankılanır null( ''). Çıktıyı geri döndürmek için var_export, ikinci bir parametre olarak sağlamanız gerekir true.
Jon Surrell

@PD değişkenlerini javascript'e aktarmak istiyorsanız, json_encodedaha iyi bir seçenektir.
andho


3

%bSeçeneği (sprintf) bir tamsayı için bir boole dönüştürür:

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

Buna aşina değilseniz: Bu işleve rastgele bir parametre verebilirsiniz, ilki , genel dize değiştirme gibi %bveya değiştirilen dizelerle baharatlanmış çıkış dizeniz olmalıdır %s.

Her desen aşağıdaki sırayla argümanla değiştirilir:

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 onu kutudan çıkarır, ancak güzel değildir (girintili, vb.):

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

... verir ...

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

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

senaryoda kullan

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

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

0

Bir boole'yi boole'ye çeviriyor ve bir tamsayı görüntülenmesini bekliyorsunuz. Bu işe yarıyor trueama yanlış değil. Bir tamsayı beklediğiniz için:

echo (int)$bool_val;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.