2015-11-20 4 views
1

У меня есть простой кодРазница между | и || в PHP

$value = 5; 
$string = 'Abc'; 

var_dump(($value > 0) || (strlen($string) == 2)); 
var_dump(($value > 0) | (strlen($string) == 2)); 

только что изменилось, так это тип возвращаемого значения (первый является boolean, второй int). Есть еще одна разница между | и ||? Могу ли я изменить один на другой?

Живой тест: http://sandbox.onlinephpfunctions.com/code/548ab723cbd156be70a596978427fbd73ce4639f

+6

Один ('|') является [побитовым оператором] (http://www.php.net/manual/en/language.operators.bitwise.php), другой ('||') является [ логический оператор] (http://www.php.net/manual/en/language.operators.logical.php) .... и нет, они не взаимозаменяемы так же, как с использованием '+' и '* 'с двумя номерами, как правило, не даст вам того же результата, потому что они разные операторы, которые делают разные вещи. –

+0

Нет, вы не можете изменить один на другой. Это совершенно разные операции. –

+0

@MarkBaker, но логика - всего 1 бит. Существует истина (1) и ложная (0). '1 | 0 <=> 1 || 0' - да или нет? – ventaquil

ответ

5

var_dump(($value > 0) || (strlen($string) == 2));

|| является логическим логическим operatpor см http://php.net/manual/de/language.operators.logical.php

var_dump(($value > 0) | (strlen($string) == 2));

| является оператором побитового см http://php.net/manual/de/language.operators.bitwise.php

Конечно, вы можете изменить | к ||, но вы не получите тот же результат;) Небольшое пояснение для вашего кода, но вы должны действительно прочитать документ для бит и логических операторов:

Вы уже ответили, что оба не делать то же самое:

var_dump(($value < 0) || (strlen($string) == 2)); -> возвращает логическое значение истинного

var_dump(($value < 0) | (strlen($string) == 2)); -> возвращает целое число 1

Если вы:

var_dump(true === 1); 

вы получите ложь, потому что число 1 не является логическим истинным, даже если:

var_dump(true == 1); 

или

var_dump(true === (bool)1); 

возвращает истину (== не проверяет тип, см docs и (bool) отличает целое число 1 как логическое значение true (см. http://php.net/manual/de/language.types.boolean.php#language.types.boolean.casting, чтобы узнать, что является ложным и что истинно).

Смежные вопросы