За последние 24 часа нас посетили 30459 программистов и 1806 роботов. Сейчас ищут 811 программистов ...

Логические операции

Тема в разделе "PHP для новичков", создана пользователем Любитель котиков, 30 июл 2018.

  1. Любитель котиков

    С нами с:
    23 окт 2017
    Сообщения:
    26
    Симпатии:
    1
    Скажите в каких случаях лучше использовать логические символьные логические операнды (&&, ||), а в каких буквенные (and, or)? Я когда начинал писать на php по старой привычке из C++/C# писал &&, ||, а потом узнал что можно and, or. Писал некоторое время их, но недавно заметил что в некоторых случаях это коренным образом меняет логику. Я читал доки, но плохо понял про приоритетность. Особенно если я использую например только and и or то почему же результат другой выходит порой - не такой как при использовании && и ||?
     
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
  3. Любитель котиков

    С нами с:
    23 окт 2017
    Сообщения:
    26
    Симпатии:
    1
    Вот сейчас ровно ничего не объяснил. Давайте без ссылок на доки - я уже привел одну. Там непонятно написано. Ну совсем непонятно.
     
  4. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @Любитель котиков, табличка непонятная нарисована? Всё равно придётся в ней разобраться, дабы потом не было мучительно больно :)
    Порядок выполнения арифметических действий... школьная ведь программа.
    Одни (&& и ||) выполняются до присваивания, другие (and, or) - после.
     
  5. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
  6. Любитель котиков

    С нами с:
    23 окт 2017
    Сообщения:
    26
    Симпатии:
    1
    ШТА? :eek:o_O:confused: Какого еще присваивания? Как они могут выполняться после присваивания? Звучит как полный бред. Чтобы выполнить присваивание надо сначала выполнить все операции и посчитать результат который уже будет присвоен.
    --- Добавлено ---
    Вот и я уже склоняюсь к этому варианту. Просто я некоторое время еще писал на питоне и там тоже были and/or, но без таких вот подводных камней. Мне это даже понравилось в том смысле что хоть я конечно я понимаю что && это "И", а || это "ИЛИ", но словами оно как-то сразу яснее и читабельнее... Ну да ладно. Фиг с ними. Буду писать символами. Я давно понял что php - гавно и все в нем не по людски сделано. В тысячный раз убедился.
     
    Sail нравится это.
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.599
    Симпатии:
    1.764
    Присваивание в PHP, как и в C - операция, возвращающая значение. Поэтому оно тоже имеет приоритет
    --- Добавлено ---
    Хотя лично я эту табличку никогда не помню, и пишу скобочки, проблем не знаю
     
  8. Любитель котиков

    С нами с:
    23 окт 2017
    Сообщения:
    26
    Симпатии:
    1
    Не понял к чему это было сказано, но взгляните на этот пример хотя-бы. С or вернуло false, а с || true. А ведь результат присваивания нигде не использовался. Именно так сказать inline.
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.599
    Симпатии:
    1.764
    Потому что с OR оно выполняется так:
    Код (Text):
    1.  
    2. ($r1 = is_int($n)) or is_int(filter_var($n, FILTER_VALIDATE_INT));
     
  10. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @Любитель котиков, знакома конструкция: a = b = c = '123'; ?
    А что касается примера, то в случае с or: выполнилось присваивание, а затем - то, что справа от or
    А в случае с || сначала выполнили is_int($n) - получили false, затем: is_int(filter_var($n, FILTER_VALIDATE_INT)) - получили true как результат логического ИЛИ (||), и следом выполнили оператор '='.
     
  11. Любитель котиков

    С нами с:
    23 окт 2017
    Сообщения:
    26
    Симпатии:
    1
    ОМГ! Развидьте мне это... Ужас
     
  12. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Не надо так, дядь.
    Похапе в целом хорош, но не без изъяна как и любой ЯП.
     
  13. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Вам скобками указали на порядок.

    Еще раз. Не смущают скобки вокруг присваивания (и вы никогда не забываете их проставлять), тогда пишем так:
    Код (Text):
    1. ($a=$exp1)||($b=$exp2)
    Иначе скобки можно опустить:
    Код (Text):
    1. $a=$exp1 or $b=$exp2
    И Хде тут ОМГ? Все до безобразия просто.
     
  14. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Он пока ещё не подсел. Пока рвотные позывы проявляются, это норм.
     
  15. Любитель котиков

    С нами с:
    23 окт 2017
    Сообщения:
    26
    Симпатии:
    1
    Если за первые пару лет не подсел дальше точно не подсяду. И вообще это последний раз когда я устроился php-разработчиком. Скоро уволюсь нахрен и пойду на свой любимый C# или Java хотя-бы.
     
  16. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    При чем тут использование результата? Сказано: до присваивания, после присваивания. Знак = такой же оператор как or и || и имеет очередность выполнения. Твой пример показывает, что or выполняется после присвоения.