присваивания в условиях помогите разобраться

t43

Новичок
PHP:
$a = array('0', 'a','b','c');

echo array_search('c', $a); //3
if($lines = array_search('c', $a) !=  false)
{
    echo $lines; //1
}
В общем, что тут не так?
 

Фанат

oncle terrible
Команда форума
не умеешь пользоваться присваиванием в условиях - не используй их. Вынеси присваивание наружу.
 

Фанат

oncle terrible
Команда форума
но если прям очень приспичило писать больше одного оператора в строку - бери каждый оператор в скобки.
но основная мысль была в том, что ели ты не понимаешь какой-то код, то лучше его и не использовать.
Сам же потом себе спасибо скажешь .

Теория, почему надо брать в скобки: http://php.net/manual/ru/language.operators.precedence.php
 
  • Like
Реакции: t43

AmdY

Пью пиво
Команда форума
t43
пиши свой код так, словно читать его будет человек уровнем слабее. поэтому луше не использовать подобные фишки с приоритетом опереторов.
месжду прочем почитай доку к http://php.net/array_search и поймёшь почему твой код даже если расставить скобки будет всё равно некорректным.
 

t43

Новичок
t43
пиши свой код так, словно читать его будет человек уровнем слабее. поэтому луше не использовать подобные фишки с приоритетом опереторов.
месжду прочем почитай доку к http://php.net/array_search и поймёшь почему твой код даже если расставить скобки будет всё равно некорректным.
то что array_search может вернуть нуль и нужно проверять так: !== false я в курсе, просто кода на форуме набирал пропустил.
 

eax

#
Дело не в этом, а в приоритете операторов. В этом случае сначала выполняется array_search('c', $a) != false что дает true, а потом выполняется $lines = true, что собственно записывает в переменную единицу. Чтобы явно указать приоритет в операторах заключайте их в скобки.

Задача:
PHP:
$b = true;
$c = false;
$a = $c or $b;

var_dump ($a);
Что запишется в переменную $a ?
 
Сверху