PHP - Nhận bool để echo sai khi sai


172

Đoạn mã sau không in ra bất cứ điều gì:

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

Nhưng mã sau đây được in 1:

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

Có cách nào tốt hơn để in 0hoặc falsekhi $bool_valfalsevì thêm một iftuyên bố?


5
Nếu đây là để gỡ lỗi, hãy thử var_dump thay vì echo.
Đánh dấu E. Haase

1
Các (bool)diễn viên là không cần thiết, bạn không cần phải cast bool để bool: (bool) true === true.
Jon Surrell

Có cách nào để cấu hình PHP sao cho echo 0==1;đầu ra 0hay falsekhông?
mario

Câu trả lời:


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

Hoặc nếu bạn chỉ muốn đầu ra khi nó sai:

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

85
Thật khó hiểu, ngổn ngang & vô ích mà không có bất kỳ lợi ích rõ ràng nào. Tôi đã lập trình được hơn 20 năm và chưa bao giờ tôi muốn 'sai' để tự động chuyển đổi thành trống .. nhiều lần, nhưng không bao giờ là 'sai'. Sự phát triển Java / Spring / Hibernate của tôi rất đơn giản và mạnh mẽ hơn nhiều so với các hệ thống PHP khiêm tốn. Tôi có thể tìm thấy nhiều người đã nhầm lẫn .. stackoverflow.com/questions/9042002/, nhưng tôi không thể tìm thấy bất kỳ tài liệu tham khảo nào về lý do thực sự cho "tính năng" thiết kế này.
Thomas W

3
Tôi thực sự muốn tranh luận tại sao (chuỗi) FALSE == "" là một ý tưởng tốt dựa trên bit này từ tài liệu của PHP: "Giá trị TRUE boolean được chuyển đổi thành chuỗi" 1 ". Boolean FALSE được chuyển đổi thành" "(trống chuỗi). Điều này cho phép chuyển đổi qua lại giữa các giá trị boolean và chuỗi. " nhưng tôi đã thử nghiệm nó và (bool) "0" cũng đánh giá thành FALSE, vì vậy ... tôi không biết. Tôi yêu PHP, nhưng tôi không thể phủ nhận rằng điều đó thật kỳ lạ> _>
Ben

7
Không có gì lạ cả FALSE == ''. Nó hoàn toàn hợp lệ và là một phần của các ngôn ngữ khác, bao gồm cả javascript. Điều kỳ lạ là FALSE mặc định là một chuỗi rỗng. Nó nên mặc định là 0. Luôn luôn. Đặc biệt vì TRUE sẽ luôn mặc định là 1. Điều này phá vỡ quy tắc chính của lập trình. Giữ mã của bạn nhất quán. Đây rõ ràng là một lỗi.
Nhà văn

1
Mặc dù đây là cách đơn giản nhất để thực hiện việc này, nhưng chạy một mảng thông qua print_r có chứa các giá trị boolean, các giá trị đó sẽ hiển thị trống trừ khi trước đó bạn chạy mảng thông qua một vòng lặp hoán đổi chúng, vì vậy nếu bạn chỉ cố gắng gỡ lỗi hoặc đăng nhập , nó trở thành một nỗi đau lớn ở cổ để xem các giá trị thực sự là đúng hay sai hoặc một cái gì khác có vẻ trống rỗng.
Dave Heq

2
@Ben mặc dù !! '0'đánh giá falsetrong PHP, nhưng đó là truetrong JS. !! ""là sai trong JS và PHP.
Charlie

64

Đây là cách dễ nhất để làm điều này:

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

hoặc là

var_export($bool_value)

Nếu đối số thứ hai không đúng, nó sẽ xuất kết quả trực tiếp.


34

Không, vì tùy chọn khác là sửa đổi công cụ Zend, và người ta sẽ khó có thể gọi đó là "cách tốt hơn".

Biên tập:

Nếu bạn thực sự muốn, bạn có thể sử dụng một mảng:

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

3
Đó là một cách kỳ lạ để làm điều đó, bởi vì các khóa mảng không thể là kiểu bool. PHP sẽ chuyển nó thành mảng (0 => 'false', 1 => 'true').
Đánh dấu E. Haase

66
@mehaase: Từ lâu tôi đã ngừng cố gắng áp dụng bất kỳ loại logic nào cho việc xử lý kiểu của PHP. Tôi chỉ lấy nó khi nó đến.
Ignacio Vazquez-Abrams

32

Điều này sẽ in ra giá trị boolean như nó là, thay vì 1/0.

    $bool = false;

    echo json_encode($bool);   //false

1
Câu trả lời tuyệt vời, đặc biệt là nếu bạn thực sự cần boolean đó trong JSON!
bart

1
đây là câu trả lời hay nhất
Shady Sherif



15

var_export cung cấp các chức năng mong muốn.

Điều này sẽ luôn in một giá trị thay vì in không có gì cho nullhoặc false. var_exportin một đại diện PHP của đối số mà nó đã thông qua, đầu ra có thể được sao chép / dán lại vào 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'

Nếu bạn muốn in chuỗi "true"hoặc "false", bạn có thể chuyển sang boolean như bên dưới, nhưng hãy cẩn thận với các đặc thù:

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

Khi nào $varlà biến boolean, truehoặc falsesẽ được in ra.


Theo tôi, giải pháp tốt nhất khi xuất các biến PHP trong JavaScript!
RPDeshaies

3
Đây là một chút sai lệch. var_exporttrong trường hợp này sẽ lặp lại kết quả của nó và trả về null, vì vậy var_export xuất ra true || falseechođang lặp lại null( ''). Để trả về đầu ra từ var_export, bạn cần cung cấp một tham số thứ hai là true.
Jon Surrell

@RPDeshaies nếu bạn muốn xuất các biến php sang javascript json_encodelà một lựa chọn tốt hơn.
andho


3

Các %btùy chọn của sprintf () sẽ chuyển đổi một boolean để một số nguyên:

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

Nếu bạn không quen với nó: Bạn có thể cung cấp cho hàm này một lượng tham số tùy ý trong khi chuỗi đầu tiên phải là chuỗi ouput của bạn được thêm vào bằng các chuỗi thay thế như %bhoặc%s để thay thế chuỗi chung.

Mỗi mẫu sẽ được thay thế bằng đối số theo thứ tự:

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 sẽ làm điều đó ngay lập tức, nhưng nó không đẹp (thụt vào, v.v.):

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

... cho ...

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

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

sử dụng trên kịch bản

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

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

0

Bạn đang chuyển một boolean thành boolean và hy vọng một số nguyên sẽ được hiển thị. Nó hoạt động cho truenhưng không sai. Vì bạn mong đợi một số nguyên:

echo (int)$bool_val;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.