Баг в waHtmlControl::getSelectControl() Не принято

2

Будьте внимательны, глючит отображение выбранного значения при использовании смешанныx (цифровыx и текстовыx) значений 'options' => [0 => ' ', 'one' => 'first'] - первое значение всегда 'selected', 'options' => ['' => ' ', 'one' => 'first'] - все ок.

6 комментариев

  • 0
    Владислав Горлов Владислав Горлов 13 декабря 2018 12:59 #

    Использование числовых ключей является некорректным, особенно в смешанном варианте. В БД значения хранятся в виде строк и при сравнении с числовым значением выполняется преобразование, делающее результат сравнения отличным от ожидаемого, в случае, если строка не приводится к числу верно.

    Поэтому либо использовать строго строковые ключи

    array(
        '0' => '',
        'one' => 'first',
        'two' => 'second',
    
    );

    Либо только числовые ключи (в этом случае приведение типов и сравнение будет работать корректно)

    array(
        0 => '',
        1 => 'first',
        2 => 'second',
    );

    В остальных случаях результат может получиться обескураживающим, особенно, если не перепроверить корректность выбора таких настроек.

    • +1
      enso_studio@mail.ru enso_studio@mail.ru 13 декабря 2018 13:57 #

      Использование числовых ключей является некорректным

      отличный способ ничего не исправлять

      • 0
        Владислав Горлов Владислав Горлов 13 декабря 2018 14:24 #

        Вводить проверку is_int и делать дополнительную ветку сравнения значений и приведения типов - костыль, имхо. Пусть и спасет тех, кто не думает о типизации. Плюс, потенциально сломает в коде, например в том же switch, что может быть в коде.

        • +1
          enso_studio@mail.ru enso_studio@mail.ru 13 декабря 2018 15:50 #
          JSON_NUMERIC_CHECK (integer) Кодирование строк, содержащих числа, как числа. Доступно с PHP 5.3.3.

          • 0
            Владислав Горлов Владислав Горлов 13 декабря 2018 15:53 #

            В json кодируются только массивы. И те, у кого PHP 5.2 всё равно остаются с ошибкой.

            • +1
              enso_studio@mail.ru enso_studio@mail.ru 13 декабря 2018 16:15 #

              а сколько этих с 5.2? я смотрел мировую статистику пол года назад 5.2 использовало 2-3%

              честно говоря я вообще не понимаю почему так получается, в коде использована не строгая проверка

              if (isset($params['value']) && ($option_value == $params['value'])) {

              т.ч. '0' == 0 - true или я что-то упускаю?

              Добавление новых комментариев к этой теме отключено.