Это для тех, кто хоть немного знаком с программированием.
PHP (любой версии). Код:
$foo = false or true;
print($foo ? ‘true’ : ‘false’);
Что выведет программы при выполнении?
/ответ под катом/
Выведет: false
Удивлен? Давай разберемся, почему.
Я всегда думал, что в PHP операторы || и OR – одно и то же, синонимы. Оно так и есть – оба – логическое ИЛИ, но с одним отличием.
У оператора OR приоритет ниже плинтуса. Ниже только у оператора перечисления “,”.
Поэтому и получается, что сначала переменной $foo присваивается значение false (т.к. приоритет оператора присваивания выше приоритета оператора OR), а затем выполняется часть “or true”, результат которой просто игнорируется.
К слову, та же песня с оперторами && и AND.

4 Responses to “От перемены мест OR’аемых сумма изменяется”
Я тебе другое скажу. Про перл. Недавно столкнулся.
есть массив из 4х элементов, Data::Dumper выводит 4 элемента:
$vlan = [
'0',
'33',
'211',
'U'
];
$#vlan возвращает 0
${@vlan} возвращает 1
а должно быть в обоих случаях 4. В результате пришлось написать волшебную функцию:
sub arraylen
{
#I hate Perl and $#.
my (@subparams)=@_;
my $i=0;
$i++ foreach (@{$subparams[0]});
return $i;
}
Возвращает 4. И после этого вы таки мне будете говорить про быдлокод.
Хе-Хе. Разобрались. Быдлокодером как обычно оказался я. Ибо это у меня оказался не массив, а массив массивов, и перл совершенно верно выдавал что у меня там индекс последнего элемента ($#) 0. А вот в нулевом элементе у меня 4 элемента:
$ln=$#{$vlan[0]}; Тогда выдает 3.
У тебя очепятка, отбрасывается “or true”, а не “or false”.
Спасибо, исправил :)