PHP - รับบูลเพื่อสะท้อนเท็จเมื่อเท็จ


172

รหัสต่อไปนี้ไม่ได้พิมพ์อะไรเลย:

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

แต่พิมพ์รหัสต่อไปนี้1:

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

มีวิธีที่ดีกว่าในการพิมพ์0หรือfalseเมื่อ$bool_valมีfalseการเพิ่มifคำสั่งกว่า?


5
หากนี่เป็นการแก้จุดบกพร่องให้ลอง var_dump แทน echo
Mark E. Haase

1
หล่อซ้ำซ้อนคุณไม่จำเป็นต้องหล่อบูลบูลเพื่อ:(bool) (bool) true === true
Jon Surrell

มีวิธีการกำหนดค่า PHP เพื่อให้ echo 0==1;ผลลัพธ์0หรือfalseไม่
มาริโอ

คำตอบ:


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

หรือถ้าคุณต้องการเอาต์พุตเมื่อมันเป็นเท็จ:

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

85
มันสับสนแผ่กิ่งก้านสาขาและไม่ช่วยเหลือโดยไม่มีผลประโยชน์ใด ๆ ที่ชัดเจน ฉันเขียนโปรแกรมมา 20 ปีแล้วและไม่เคยต้องการ 'false' เป็น auto-converter เป็น blank .. null หลายครั้ง แต่ไม่เคย 'false' การพัฒนา Java / Spring / Hibernate ของฉันมีความสะอาดและแข็งแรงกว่าระบบ PHP ที่เรียบง่าย ฉันสามารถหาคนมากมายที่สับสน .. stackoverflow.com/questions/9042002/ แต่ฉันไม่พบการอ้างอิงใด ๆ เกี่ยวกับเหตุผลที่แท้จริงสำหรับ "ฟีเจอร์" การออกแบบนี้
Thomas W

3
ฉันอยากจะเถียงว่าทำไม (สตริง) FALSE == "" เป็นความคิดที่ดีจากบิตนี้จากเอกสารของ PHP: "ค่าบูลีน TRUE ถูกแปลงเป็นสตริง" 1 "Boolean FALSE ถูกแปลงเป็น" "(ว่างเปล่า สตริง) สิ่งนี้อนุญาตให้แปลงไปมาระหว่างค่าบูลีนและสตริง " แต่ฉันทดสอบมันออกมาและ (bool) "0" ก็ประเมินเป็น FALSE ดังนั้น ... ฉันไม่รู้ ฉันรัก PHP แต่ฉันไม่สามารถปฏิเสธได้ว่าเป็นเรื่องแปลก> _>
Ben

7
FALSE == ''มันไม่แปลกที่ มันถูกต้องสมบูรณ์และเป็นส่วนหนึ่งของภาษาอื่น ๆ รวมถึงจาวาสคริปต์ สิ่งที่แปลกคือค่าเริ่มต้นเป็น FALSE เป็นสตริงว่าง ค่าเริ่มต้นควรเป็น 0 เสมอ โดยเฉพาะอย่างยิ่งเนื่องจาก TRUE จะใช้ค่าเริ่มต้นเป็น 1 ซึ่งจะแบ่งกฎการเขียนโปรแกรมที่สำคัญ รักษารหัสของคุณให้สอดคล้องกัน นี่เป็นข้อผิดพลาดอย่างชัดเจน
Literphor

1
ในขณะที่วิธีนี้เป็นวิธีที่ง่ายที่สุดในการทำเช่นนี้การเรียกใช้อาร์เรย์ผ่าน print_r ที่มีค่าบูลีนค่าเหล่านั้นจะแสดงเป็นค่าว่างเปล่ายกเว้นว่าก่อนหน้านี้คุณเรียกใช้อาร์เรย์ผ่านลูปที่สลับมันออกไป มันกลายเป็นความเจ็บปวดครั้งใหญ่ที่คอเพื่อดูว่าคุณค่านั้นจริงหรือเท็จหรืออย่างอื่นที่ดูเหมือนว่าว่างเปล่า
Dave Heq

2
@Ben ถึงแม้ว่าจะ!! '0'ประเมินเป็นfalsePHP แต่ก็trueอยู่ใน JS !! ""เป็นเท็จใน JS และ PHP
Charlie

64

นี่เป็นวิธีที่ง่ายที่สุดในการทำสิ่งนี้:

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

หรือ

var_export($bool_value)

หากอาร์กิวเมนต์ที่สองไม่เป็นจริงมันจะส่งผลลัพธ์โดยตรง


34

ไม่เนื่องจากตัวเลือกอื่นกำลังแก้ไขเอ็นจิ้นของ Zend และจะมีใครกดยากที่จะเรียกว่า "วิธีที่ดีกว่า"

แก้ไข:

หากคุณต้องการคุณสามารถใช้อาเรย์:

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

3
นี่เป็นวิธีที่แปลกที่จะทำเพราะคีย์อาร์เรย์ไม่สามารถเป็นประเภทบูลได้ PHP จะส่งไปยังอาร์เรย์ (0 => 'false', 1 => 'true')
Mark E. Haase

66
@mehaase: ฉันหยุดนานแล้วที่จะพยายามใช้ตรรกะประเภทใดก็ตามกับการจัดการประเภทของ PHP ฉันแค่เอามันไป
Ignacio Vazquez-Abrams

32

สิ่งนี้จะพิมพ์ค่าบูลีนออกมาแทน 1/0

    $bool = false;

    echo json_encode($bool);   //false

1
คำตอบที่ยอดเยี่ยมโดยเฉพาะถ้าคุณต้องการบูลีนใน JSON!
บาร์ต

1
นี่เป็นคำตอบที่ดีที่สุด
Shady Sherif



15

var_export มีฟังก์ชั่นที่ต้องการ

นี้จะเสมอพิมพ์ค่ามากกว่าการพิมพ์อะไรหรือnull พิมพ์การแทนค่า PHP ของอาร์กิวเมนต์ที่ส่งผ่านเอาต์พุตสามารถคัดลอก / วางกลับไปที่ PHPfalsevar_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'

หากคุณต้องการพิมพ์สตริง"true"หรือ"false"คุณสามารถส่งไปยังบูลีนดังต่อไปนี้ แต่ระวังลักษณะเฉพาะ:

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

เมื่อ$varใดที่ตัวแปรบูลีนtrueหรือfalseจะถูกพิมพ์ออกมา


ในความคิดของฉันทางออกที่ดีที่สุดเมื่อส่งออกตัวแปร PHP ใน JavaScript!
RPDeshaies

3
นี่เป็นสิ่งที่ทำให้เข้าใจผิดเล็กน้อย var_exportในกรณีนี้จะสะท้อนผลลัพธ์และส่งคืนค่า null ดังนั้น var_export กำลังแสดงผลtrue || falseและechoกำลังสะท้อนnull( '') หากต้องการกลับไปเอาท์พุทจากคุณจะต้องจัดหาพารามิเตอร์ที่สองเป็นvar_export true
Jon Surrell

@RPDeshaies หากคุณต้องการส่งออกตัวแปร php ไปยัง javascript json_encodeเป็นตัวเลือกที่ดีกว่า
andho


3

%bตัวเลือกในการsprintf ()จะแปลงแบบบูลเป็นจำนวนเต็ม:

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

หากคุณไม่คุ้นเคย: คุณสามารถกำหนดให้ฟังก์ชันนี้มีพารามิเตอร์ตามจำนวนที่กำหนดในขณะที่พารามิเตอร์แรกควรเป็นสตริง ouput ของคุณที่ถูก spiced ด้วยสตริงการแทนที่เช่น%bหรือ%sการแทนที่สตริงทั่วไป

แต่ละรูปแบบจะถูกแทนที่ด้วยอาร์กิวเมนต์ตามลำดับ:

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 จะทำมันออกจากกล่อง แต่มันไม่สวย (เยื้อง, ฯลฯ ):

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

... ให้ ...

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

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

ใช้กับสคริปต์

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

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

0

คุณกำลังส่งบูลีนไปยังบูลีนและคาดว่าจะแสดงจำนวนเต็ม มันใช้งานtrueได้ แต่ไม่ใช่เท็จ เนื่องจากคุณคาดหวังจำนวนเต็ม:

echo (int)$bool_val;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.