За последние 24 часа нас посетили 35120 программистов и 1758 роботов. Сейчас ищут 863 программиста ...

Проверить переменную id

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

  1. rs_ssh

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

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    Какой самый лучший способ проверки переменной на то что она является числом и не равно 0?
    PHP:
    1. if (!is_numeric($id) or empty($id))
     
  2. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    числа разные бывают
     
  3. rs_ssh

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

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    В id записываются целые числа больше нуля.
     
  4. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Я обычно не проверяю,а привожу к нужному мне типу.
    PHP:
    1. $id = (int)$_GET['id'];
    Ну а после можно уже проверить 0 там или нет.
     
  5. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Автор, вот тебе в помощь. Там много интересного, особенно по второй ссылке. Вторая ссылка - расширение первой.
    Раз https://php.net/manual/ru/function.filter-var
    два https://php.net/manual/ru/filter.filters.validate

    И это не правильно, потому что при приведении к типу ты гарантированно получаешь этот тип. А автору нужна проверка. Мы же не знаем контекст его задачи. Мб если там строка, нужно какое-то другое действие.
     
  6. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Ну я и описал свой подход исходя из того что id гарантированно должно быть int и без каких либо условий. А так, если ему нужна именно валидация и в случае если она даст false у него будут какие то действия то твои ссылки то что нужно ТС.
    PHP:
    1. filter_var($id,FILTER_VALIDATE_INT);
     
  7. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Тут есть еще такое дело, как семантика и самодокументируемость кода.
    Использование filter_var однозначно трактуется как "автор кода проверяет переменную". Использование каста же, семантически, является странной логикой. Вместо проверки мы приводим переменную к другому типу, и только потом заглядываем внутрь. Это даже чисто на низком уровне больше телодвижений. Приведение и проверка на 0 стоят, скорее всего, чуть дороже, чем проверка на число и проверка на 0. И, само собой, такой код уже сложнее в понимании в долгосрочной перспективе. Все должно быть на своем месте.
     
  8. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Ну если брать низкий уровень,то и побитовый сдвиг менее затратная операция чем умножение на 2 и так можно глубоко углубляться в недры языка,можно использовать SplFixedArray вместо обычного массива если ты знаешь конкретное число элементов массива,так как памяти потребляется во много раз меньше.С моей субъективной точки зрения конечно же получать однозначные данные вместо их валидации конкретно в случае с id которые как правило являются int проще, нежели делать какую либо валидацию задавая вопрос "а действительно там число?".Опять же это мой подход,я его никому не навязываю. Просто поделился некими соображениями с ТС касаемо того,как лично я реализую работу с id ПРИ условии опять же что else я не предусматриваю.
     
    #8 alexblack, 5 фев 2017
    Последнее редактирование: 5 фев 2017
  9. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    if ((int)$id > 0)
     
  10. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА