За последние 24 часа нас посетили 52688 программистов и 6497 роботов. Сейчас ищут 1790 программистов ...

assert() для функции. помогите разобраться

Тема в разделе "PHP для новичков", создана пользователем groemk, 4 фев 2017.

Метки:
  1. groemk

    groemk Новичок

    С нами с:
    4 фев 2017
    Сообщения:
    2
    Симпатии:
    0
    Доброго дня.
    Есть некая функция. Необходимо ограничить диапазон ввода значений у нее, при которых она работает правильно, а при остальных выдавало бы ошибку . Можно было бы поставить проверки в самой функции, но хотелось бы прибегнуть к функции assert().

    Возможно ли создать такое выражение в проверке функции assert() на истинность?

    Необходимые условия: $A и $B принимают значения только 0 или 1
    $operator - только "and", "or", "xor"

    Искал в инете, но там почти везде копипаст с php.net. В тех примерах не разобрался.
    Может кто доступно сможет объяснить?

    Сама функция:

    PHP:
    1. function getBool($A, $B, $operator) {
    2.     switch (strtolower($operator)) {
    3.         case "and":
    4.             return (int)($A && $B);
    5.         case "or":
    6.             return (int)($A || $B);
    7.         case "xor":
    8.             return (int)($A XOR $B);
    9.         default:
    10.             return "NULL";
    11.     }
    12. }
     
    #1 groemk, 4 фев 2017
    Последнее редактирование модератором: 4 фев 2017
  2. mexanika

    mexanika Новичок

    С нами с:
    27 янв 2017
    Сообщения:
    11
    Симпатии:
    3
    Так?
    PHP:
    1. function assert_failure() {
    2.     echo 'Проверка провалена';
    3. }
    4.  
    5. function checkParams($A, $B, $operator) {
    6.    
    7.     assert(in_array($operator, array('and', 'or', 'xor')));
    8.     assert( ($A == 0 or $A == 1) ? true : false );
    9.     assert( ($B == 0 or $B == 1) ? true : false );
    10.    
    11. }
    12.  
    13. assert_options(ASSERT_ACTIVE,   true);
    14. assert_options(ASSERT_BAIL,     true);
    15. assert_options(ASSERT_WARNING,  false);
    16. assert_options(ASSERT_CALLBACK, 'assert_failure');
    17.  
    18.  
    19. function getBool($A, $B, $operator) {  
    20.    
    21.     checkParams($A, $B, $operator);
    22.    
    23.     switch (strtolower($operator)) {
    24.         case "and":
    25.             return (int)($A && $B);
    26.         case "or":
    27.             return (int)($A || $B);
    28.         case "xor":
    29.             return (int)($A XOR $B);
    30.         default:
    31.             return "NULL";
    32.     }
    33. }
    34.  
    35. echo getBool(1, 1, "xor");
     
  3. groemk

    groemk Новичок

    С нами с:
    4 фев 2017
    Сообщения:
    2
    Симпатии:
    0
    Ого, спасибо)
    8 и 9 строчка как читается?
    --- Добавлено ---
    значение $A один или ноль - это true , иначе фолс?
     
  4. mexanika

    mexanika Новичок

    С нами с:
    27 янв 2017
    Сообщения:
    11
    Симпатии:
    3
    да, это сокращенная форма if else
     
  5. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Вот всегда интересовало, а тернарник нафига? У вас что, логическое выражение $A==0 or $A==1 может дать какой-то ещё результат, кроме true или false?
     
  6. mexanika

    mexanika Новичок

    С нами с:
    27 янв 2017
    Сообщения:
    11
    Симпатии:
    3
    PHP:
    1. function checkParams($A, $B, $operator) {
    2.    
    3.     assert(in_array($operator, array('and', 'or', 'xor')));
    4.     assert(($A == 0 or $A == 1) and ($B == 0 or $B == 1));
    5.    
    6. }