PHP - Отримати bool для відлуння хибного, коли false


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.
Марк Е. Хааз

1
Гравець (bool)зайвий, вам не потрібно кидати bool на bool : (bool) true === true.
Джон Суррелл

Чи є спосіб налаштувати PHP так, щоб echo 0==1;виходити 0чи false?
Маріо

Відповіді:


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

Або якщо ви хочете виводити лише тоді, коли він хибний:

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

85
Це заплутано, розповсюджено і не допомагає без видимої вигоди. Я програмував 20+ років, і ніколи не хотів, щоб "false" автоматично перетворювалося на порожнє .. null багато разів, але ніколи "false". Моя розробка Java / Spring / Hibernate настільки чистіша та сильніша, ніж навіть скромні системи PHP. Я міг знайти безліч людей, котрі розгублені .. stackoverflow.com/questions/9042002/…, але я не міг знайти жодної посилання на реальну причину цієї дизайнерської "функції".
Thomas W

3
Мені дуже хотілося заперечити, чому (string) FALSE == "" є хорошою ідеєю, заснованою на цьому біті з документації PHP: "Булеве значення TRUE перетворюється на рядок" 1 ". Булевий FALSE перетворюється в" "(порожній це дозволяє перетворювати назад і назад між булевими та рядковими значеннями. " але я перевірив це, і (bool) "0" також оцінює ЛЖЕ, тому ... я не знаю. Я люблю PHP, але не можу заперечити, що це якось дивно> _>
Бен

7
Це не дивно FALSE == ''. Це абсолютно дійсна і частина інших мов, включаючи JavaScript. Що дивно, це БУДЬКИЙ за замовчуванням порожній рядок. За замовчуванням він повинен дорівнювати 0. Завжди. Тим більше, що TRUE завжди буде за замовчуванням до 1. Це порушує кардинальне правило програмування. Тримайте код узгодженим. Це явно помилка.
Літерфор

1
Хоча це найпростіший спосіб зробити це, запустивши масив через print_r, який містить булеві значення, ці значення будуть відображатися порожніми, якщо ви раніше не запускаєте масив через цикл, який їх заміняє, так що якщо ви просто намагаєтеся налагоджувати або входити в систему , це стає гігантським болем у шиї, щоб побачити, чи справді ці значення справді чи неправдиві чи щось інше, що виглядає порожнім.
Дейв Хек

2
@Ben хоча !! '0'оцінюється як falseу PHP, це trueв JS. !! ""false в JS та PHP.
Чарлі

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
Це дивний спосіб зробити це, оскільки ключі масиву не можуть бути типами bool. PHP передасть це масиву (0 => 'false', 1 => 'true').
Марк Е. Хааз

66
@mehaase: Я давно перестав намагатися застосовувати будь-яку логіку щодо обробки типу PHP. Я просто приймаю це, як воно приходить.
Ігнасіо Васкес-Абрамс

32

Це виведе булеве значення, яке воно є, замість 1/0.

    $bool = false;

    echo json_encode($bool);   //false

1
Прекрасна відповідь, особливо якщо вам точно потрібен булевий в JSON!
барт

1
це найкраща відповідь
Шеді Шериф



15

var_export забезпечує бажану функціональність.

Це завжди буде надрукувати значення, а не надрукувати нічого для nullабо false. var_exportдрукує представлення PHP аргументу, який він передає, вихід може бути скопійований / вставлений назад у 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'

Якщо ви хочете надрукувати рядки "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в цьому випадку буде відлуння його результат і повернення нуля, так var_export виводить true || false, і echoце відлуння null( ''). Щоб повернути вихід з var_export, потрібно надати другий параметр як true.
Джон Суррелл

@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

Якщо ви не знайомі з цим: Ви можете надати цій функції довільну кількість параметрів, тоді як першою має бути ваша вихідна рядок, присипана рядками заміни на зразок %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;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.