За последние 24 часа нас посетили 22683 программиста и 1278 роботов. Сейчас ищут 762 программиста ...

Проблема, касаемая логики PHP.

Тема в разделе "Прочие вопросы по PHP", создана пользователем kiloweg, 25 янв 2023.

  1. kiloweg

    kiloweg Новичок

    С нами с:
    25 янв 2023
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте, вопрос от нуба в PHP. Объясните мне, пожалуйста, почему информация о
    переменной $x, заданной как
    Код (Text):
    1. <?php $x = true xor true ?>
    при выводе с помощью
    Код (Text):
    1. <?php var_dump($x); ?>
    выводится bool(true), хотя ожидается bool(false). Решение проблемы есть: поставить скобки в значении переменной при объявлении, т.е. :
    Код (Text):
    1. <?php $x = (true xor true) ?>
    Только тогда выводится bool(false).
    Но почему так важны эти скобки?

    Заранее спасибо!
     
    #1 kiloweg, 25 янв 2023
    Последнее редактирование: 25 янв 2023
  2. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Потому что присваивание имеет высший приоритет, чем xor (в пыхе, как в сишке, присвание возвращает значение). Зачем так сделано - хрен его знает :) Я правда не помню, когда в последний раз писал xor
     
  3. kiloweg

    kiloweg Новичок

    С нами с:
    25 янв 2023
    Сообщения:
    2
    Симпатии:
    0
    А, то есть PHP берет только <?php $x = true ?>, ясно. Ну хоть понятнее стало, спасибо большое!
    --- Добавлено ---
    Додуматься да такого для меня было бы сложно.
     
  4. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    PHP "берёт" всё выражение, которое записано.
    Делов порядке выполнения операторов присваивания и исключающего или.
    Чтобы не додумываться: PHP: Руководство по PHP - Manual
    О приоритете: PHP: Приоритет оператора - Manual
     
  5. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    С чего бы? Я такого не писал. Пыха делает
    PHP:
    1. ($x = true) xor true
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    @kiloweg осталось придумать как узнать было ли обращение ко второму true или нет :) это несложно