2016-05-06 2 views
-2

Вот пример кода:Нужен ли третичный оператор?

$boolValue = ($a == $b) ? true : false; 

Когда я пытаюсь более короткий путь:

$boolValue = ($a == $b); 

Его возвращение либо 1 или NULL.

Есть ли более элегантный способ возврата bool?

+4

Это называется 'ternary' и Параметр # 2 делает то же самое, что и вариант 1, но с меньшим количеством кода. Heck, сократите его еще больше '$ boolValue = $ a == $ b;' – MonkeyZeus

+0

Любой, кто собирается спросить, зачем ему нужно 1 или нуль? С положением 1 или 0 слишком сложно работать? –

+0

Значение по умолчанию равно null – Fil

ответ

3

В первый, имеющий такой код:

($a == $b) 

Определенно будет возвращать true или false. Если вы получаете 1 или NULL, то с кодом появляется некоторая ошибка или что-то еще. Но, чтобы обойти эту ошибку, вы можете использовать использовать !!, чтобы заставить какое-либо значение для возврата к булеву:

$boolValue = !!($a == $b); 

!! преобразует любое значение в true или false в зависимости от truthiness значения. Это что-то вроде преобразования типов для bool.

Итак, как вы требование, который не может быть в случае, когда !! добавляется перед 1 или NULL, он будет возвращать либо true или false.

+4

Это бесполезно, поскольку ($ a == $ b) уже является логическим, и даже если он не был основным [type cast using (bool)] (http://php.net/manual/en/language.types .type-juggling.php # language.types.typecasting) выполнит то же самое. –

+0

@PaulCrovella От OP 'Его возврат 1 или NULL .'. –

+0

И они ошибаются. –

4

Причина, по которой $boolValue = ($a == $b); возвращается 1 или NULL, потому что вы проверяете его эхо, как это:

$boolValue = ($a == $b); 
echo $bool_value; // outputs 1 or nothing at all (NULL) 

Вы должны проверить его с var_dump()

$boolValue = ($a == $b); 
var_dump($bool_value); // outputs bool(true) or bool(false)