Скажите в каких случаях лучше использовать логические символьные логические операнды (&&, ||), а в каких буквенные (and, or)? Я когда начинал писать на php по старой привычке из C++/C# писал &&, ||, а потом узнал что можно and, or. Писал некоторое время их, но недавно заметил что в некоторых случаях это коренным образом меняет логику. Я читал доки, но плохо понял про приоритетность. Особенно если я использую например только and и or то почему же результат другой выходит порой - не такой как при использовании && и ||?
Вот сейчас ровно ничего не объяснил. Давайте без ссылок на доки - я уже привел одну. Там непонятно написано. Ну совсем непонятно.
@Любитель котиков, табличка непонятная нарисована? Всё равно придётся в ней разобраться, дабы потом не было мучительно больно Порядок выполнения арифметических действий... школьная ведь программа. Одни (&& и ||) выполняются до присваивания, другие (and, or) - после.
ШТА? Какого еще присваивания? Как они могут выполняться после присваивания? Звучит как полный бред. Чтобы выполнить присваивание надо сначала выполнить все операции и посчитать результат который уже будет присвоен. --- Добавлено --- Вот и я уже склоняюсь к этому варианту. Просто я некоторое время еще писал на питоне и там тоже были and/or, но без таких вот подводных камней. Мне это даже понравилось в том смысле что хоть я конечно я понимаю что && это "И", а || это "ИЛИ", но словами оно как-то сразу яснее и читабельнее... Ну да ладно. Фиг с ними. Буду писать символами. Я давно понял что php - гавно и все в нем не по людски сделано. В тысячный раз убедился.
Присваивание в PHP, как и в C - операция, возвращающая значение. Поэтому оно тоже имеет приоритет --- Добавлено --- Хотя лично я эту табличку никогда не помню, и пишу скобочки, проблем не знаю
Не понял к чему это было сказано, но взгляните на этот пример хотя-бы. С or вернуло false, а с || true. А ведь результат присваивания нигде не использовался. Именно так сказать inline.
Потому что с OR оно выполняется так: Код (Text): ($r1 = is_int($n)) or is_int(filter_var($n, FILTER_VALIDATE_INT));
@Любитель котиков, знакома конструкция: a = b = c = '123'; ? А что касается примера, то в случае с or: выполнилось присваивание, а затем - то, что справа от or А в случае с || сначала выполнили is_int($n) - получили false, затем: is_int(filter_var($n, FILTER_VALIDATE_INT)) - получили true как результат логического ИЛИ (||), и следом выполнили оператор '='.
Вам скобками указали на порядок. Еще раз. Не смущают скобки вокруг присваивания (и вы никогда не забываете их проставлять), тогда пишем так: Код (Text): ($a=$exp1)||($b=$exp2) Иначе скобки можно опустить: Код (Text): $a=$exp1 or $b=$exp2 И Хде тут ОМГ? Все до безобразия просто.
Если за первые пару лет не подсел дальше точно не подсяду. И вообще это последний раз когда я устроился php-разработчиком. Скоро уволюсь нахрен и пойду на свой любимый C# или Java хотя-бы.
При чем тут использование результата? Сказано: до присваивания, после присваивания. Знак = такой же оператор как or и || и имеет очередность выполнения. Твой пример показывает, что or выполняется после присвоения.