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

Dead Moroz пошутил(а):
Я тебе другое скажу. Про перл. Недавно столкнулся.
есть массив из 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. И после этого вы таки мне будете говорить про быдлокод.
Link | Декабрь 13th, 2008 at 13:26
Dead Moroz выразил(а) мнение:
Хе-Хе. Разобрались. Быдлокодером как обычно оказался я. Ибо это у меня оказался не массив, а массив массивов, и перл совершенно верно выдавал что у меня там индекс последнего элемента ($#) 0. А вот в нулевом элементе у меня 4 элемента:
$ln=$#{$vlan[0]}; Тогда выдает 3.
Link | Декабрь 13th, 2008 at 14:18
Андрей написал(а):
У тебя очепятка, отбрасывается “or true”, а не “or false”.
Link | Декабрь 13th, 2008 at 17:47
3eka облек(ла) свое умозаключение в форму комментария:
Спасибо, исправил :)
Link | Декабрь 13th, 2008 at 18:06