За последние 24 часа нас посетили 8372 программиста и 518 роботов. Сейчас ищут 186 программистов ...

Как записать такой код красиво

Тема в разделе "PHP для новичков", создана пользователем Untropee, 17 авг 2022.

  1. Untropee

    Untropee Активный пользователь

    С нами с:
    29 окт 2018
    Сообщения:
    4
    Симпатии:
    0
    Приветствую, друзья! Помогите правильно и красиво оформить следующий код, если это возможно:

    PHP:
    1.    
    2.     $var1 = $_GET['side'];
    3.     $var2 = $infoArr[0][1]['positionAmt'];
    4.     $var3 = $_GET['side'];
    5.     $var4 = $infoArr[0][0]['positionAmt'];
    6.     $var5 = $_GET['side2'];
    7.     $var6 = $infoArr[0][0]['positionAmt2'];
    8.    
    9.     if ($var1 == 'SELL' and empty($var2) or $var3 == 'BUY' and empty($var4) or $var5 == 'BUY' and empty($var6))
    10.         echo 1;
    Не нравится, что в условие переменные помещаются кучей, выглядит быдловато)
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.417
    Симпатии:
    657
    Адрес:
    Татарстан
    для начала виду лишнюю переменную var3 которая дублирует var1, убираем ее, а условие так меняем
    PHP:
    1. in_array($var1,['SELL','BUY'])
    и расставьте скобки что в какой последовательности должно сравниваться.. а то очень удивитесь результатам
     
    Untropee нравится это.
  3. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    10.752
    Симпатии:
    1.150
    Адрес:
    там-сям
    чтобы код читался, надо давать переменным осмысленные имена. var1, var2... это говнонейминг

    в PHP есть две версии логических операторов. одни пишутся словами как у вас - or и and - а другие символами || и &&. они имеют разный приоритет!!! в любом случае, если выражение комбинирует несколько условий И и ИЛИ, всегда ставьте скобки, чтобы явно указать приоритет. приоритет может напрочь перевернуть смысл всего выражения.

    читайте справочник по языку, это основное для вас на вашем нулевом уровне. https://www.php.net/manual/ru/
    --- Добавлено ---
    пример из документации:

    PHP:
    1. // --------------------
    2. // "||" имеет больший приоритет, чем "or"
    3.  
    4. // Результат выражения (false || true) присваивается переменной $e
    5. // Действует как: ($e = (false || true))
    6. $e = false || true;
    7.  
    8. // Константа false присваивается $f, а затем значение true игнорируется
    9. // Действует как: (($f = false) or true)
    10. $f = false or true;
    11.  
    12. var_dump($e, $f);
    выведет
    Код (Text):
    1.  
    2. bool(true)
    3. bool(false)
    в общем случае, если нет реальных причин делать иначе, всегда используйте && и ||, так поступают все ведущие программеры на php.
     
    don.bidon и Untropee нравится это.
  4. Untropee

    Untropee Активный пользователь

    С нами с:
    29 окт 2018
    Сообщения:
    4
    Симпатии:
    0
    Все имена переменным давались для примера) Вопрос был в том как красиво вписать значения в условия если это возможно. за ссылку огромная благодарность, и за замечения по моему опыту тоже благодарю))

    p.s. А так я с 2015 по 2020 год написал 25 браузерных игр в соц сетях на js+php) вас я еще помню с тех не запамятных времен:) После небольшого перерыва решил освежить знания, копаюсь в старых кодах)
     
  5. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    10.752
    Симпатии:
    1.150
    Адрес:
    там-сям
    не надо оправдываться. ты получил ответ именно на то, как сформулировал вопрос.
     
    Untropee нравится это.
  6. Untropee

    Untropee Активный пользователь

    С нами с:
    29 окт 2018
    Сообщения:
    4
    Симпатии:
    0
    Несомненно;)
     
  7. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    10.752
    Симпатии:
    1.150
    Адрес:
    там-сям
    используй нормальные имена. не пользуйся нестандартными для php логическими операторами. переменные задублированы — значит можно часть выкинуть. комбинируя условия И и ИЛИ окружай операции скобками чтобы явно указать приоритет.
    всё вместе даст меньше визуального шума, а смысл будет виден лучше.
    --- Добавлено ---
    еще раз про приоритеты для примера
    Код (Text):
    1.  
    2. $ php -r "var_dump(true || false && false);"
    3. bool(true)
    приоритет здесь определяет результат. если БЫ выражение выполнялось буквально слева-направо, как
    (true || false) && false
    то результат был бы false. а он выполняется так
    true || (false && false)
    и даёт true :)

    скобки рулят!
     
    Untropee нравится это.
  8. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.493
    Симпатии:
    334
    Тут важно уточнить, что в рассмотренном примере приоритет этих логических операторов (|| и or) надо сравненивать с приоритетом операции присваивания.
    Тогда пояснение "Действует как: (($f = false) or true)" уже не выглядит "взятым с потолка".
    И в русском переводе "а затем значение true игнорируется" - не корректно.
    Оно не игнорируется, а выполняется, хотя ничему не присваивается.
    Но если вместо true будет вызов функции... :)
     
  9. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.267
    Симпатии:
    246
    Код (Text):
    1.     $arr['var1'] = isset($_GET['side'])  && $_GET['side']  == 'SELL' ? $infoArr[0][1]['positionAmt']  : 0;
    2.     $arr['var2'] = isset($_GET['side1']) && $_GET['side1'] == 'BUY'  ? $infoArr[0][1]['positionAmt1'] : 0;
    3.     $arr['var3'] = isset($_GET['side2']) && $_GET['side2'] == 'BUY'  ? $infoArr[0][1]['positionAmt2'] : 0;
    4.  
    5.     if(array_sum($arr) == 0) echo 1;