За последние 24 часа нас посетил 69501 программист и 3583 робота. Сейчас ищут 3052 программиста ...

Проблема, касаемая логики 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.496
    Симпатии:
    1.725
    Потому что присваивание имеет высший приоритет, чем xor (в пыхе, как в сишке, присвание возвращает значение). Зачем так сделано - хрен его знает :) Я правда не помню, когда в последний раз писал xor
     
  3. kiloweg

    kiloweg Новичок

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

    Sail Старожил

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

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

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

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

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