За последние 24 часа нас посетили 17434 программиста и 1279 роботов. Сейчас ищут 1410 программистов ...

Что делают два восклицательных знака?

Тема в разделе "Вопросы от блондинок", создана пользователем Catrina, 8 июн 2015.

  1. Catrina

    Catrina Новичок

    С нами с:
    24 апр 2015
    Сообщения:
    321
    Симпатии:
    0
    Код (PHP):
    1.     public function validate($input)
    2.     {
    3.         $valid = filter_var($input, FILTER_VALIDATE_URL);
    4.         return !!$valid;
    5.     }
    6.  
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Индийский код. Это даже не приведение к булеву типу, это двойное логическое "не", в итоге через кишечник получает булево значение сердца!
     
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Это не из попова случайно? Адская обертка над встроенной функцией, которая:
    1) Добавляет оверхед;
    2) Коцает результаты функции, которые, будучи вставленные в любое выражение и так будут трактованы как true.
     
  4. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    а почему индийский? filter_var возвращает mixed а мне надо что бы не mixed, а bool, вот эта комбинация и приводит результат к bool.
    хотя конечно логичнее было бы писать за место !! вот это (bool)

    но это не попов, он бы до такого не додумал, хотя и эксперт в области web-программирования.
     
  5. Berezovsky

    Berezovsky Новичок

    С нами с:
    1 апр 2015
    Сообщения:
    17
    Симпатии:
    0
    Это вообще работает?
     
  6. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    конечно работает. ты можешь написать хоть !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
  7. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    это отрицание отрицания.
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Если уж прям так нужно и автокаст не поможет, то (bool)$var, Карл...
     
  9. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Я тоже так хотел сказать, но потом понял, что это не верно. Над результатом функции filter_var вообще никаких операций не проводится. Буль в данной ситуации есть результат логической операции ! =)
     
  10. Catrina

    Catrina Новичок

    С нами с:
    24 апр 2015
    Сообщения:
    321
    Симпатии:
    0
    Взято из кода jbbcode.com
    Вообще, так красиво делать или лучше (bool) ?
     
  11. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
    дело вкуса

    Добавлено спустя 1 минуту:
    п.м.с.м., надо писать код так, чтобы было понятно не только экспертам. !! выглядит как шарада :)
     
  12. Catrina

    Catrina Новичок

    С нами с:
    24 апр 2015
    Сообщения:
    321
    Симпатии:
    0
    mixed filter_var ( ....)
    https://php.net/manual/ru/function.filter-var.php
     
  13. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
    filter_var() с этими параметрами вернет либо строку с URL, либо false.
    !! также как и (bool) превратит строку с url в true, а false оставит как false. и что здесь не верно?

    кстати, тема уже поднималась здесь: viewtopic.php?f=13&t=52659
     
  14. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Можно вообще не трогать. В любом логическом выражении любое значение, отличное от 'false', 0, null и тд будет трактоваться как true. В этом суть того, почему 95% функций возвращают не true/false а "какое-то более полезное значение"/false. Первое и так true.
     
  15. Catrina

    Catrina Новичок

    С нами с:
    24 апр 2015
    Сообщения:
    321
    Симпатии:
    0
    Помню, у меня были сложности со значением 0. Нужно было пропускать лишь числа и проверять,
    что это действительно число и что оно действительно установлено. 0 трактовался, как false.
     
  16. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    В языках со слабым типизированием, типа PHP, есть специальный оператор "===", он проводит сравнение с учетом типа операндов.

    0 == false //true
    0 === false // false

    Добавлено спустя 1 минуту 7 секунд:
    Еще в PHP есть функции типа is_numeric(). И более конкретные типа is_int();
     
  17. Catrina

    Catrina Новичок

    С нами с:
    24 апр 2015
    Сообщения:
    321
    Симпатии:
    0
    is_int() - это как раз то, что надо. Даже стыдно, ведь я эту функцию знаю. ))
     
  18. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Ну так век живи же :)
     
  19. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Безумный PHP. Фьюри код Свежая статейка с хабра на тему закидонов пхп.
     
  20. Catrina

    Catrina Новичок

    С нами с:
    24 апр 2015
    Сообщения:
    321
    Симпатии:
    0
    Весело. :) И тут же у меня появился ещё вопросик, почему четыре:

    Код (Text):
    1. $a = 1;
    2. var_dump( $a + ++$a ); //4   о_О
    Может, я чего-то не понимаю, но кажется, что должно быть три, да?
     
  21. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Не должно. И не будет.

    Разберем $a + ++$a:
    1) сначала делается преинкремент ++$a, из-за этого $a становится равен 2.
    2) Но $a стоит в двух местах в выражении...
    3) Правильно! Получилось 2+2.

    Просто у ++ приоритет в пхп выше, вот и все, хз чего тут прям такого странного и удивительного.
     
  22. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    а ну ка проверь так
    Код (PHP):
    1. $a = 1;
    2. var_dump($a + $a++); 
    :)
    Как только ты поймешь разницу в ++$a и $a++ все тебе станят понятно
     
  23. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Если это мне, то разницу между постинкрементом и преинкрементом я знаю. Да, не уточнил, что
    это про преинкремент, потому что он выполняется до передачи операндов оператору. А постинкремент выполняется уже как часть выражения, когда первое $a уже записано как операнд, то есть значение уже скопировано.
     
  24. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    ей адресовалось.
     
  25. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    В пыхе есть два важных правила:
    1. === и !== - всегда и везде. Если нужно, приводить типы явно через (int), (string) и т.д.
    2. in_array($a, $b, true)

    ну и нотисы воспринимать как фатальную ошибку. К примеру laravel при включенном дебаге от нотиса падает. И это круто )