1. PHP / Говнокод #13211

    +153

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    public function __isset($name) {
            return ($this->getOption(xPDO::OPT_HYDRATE_FIELDS) && array_key_exists($name, $this->_fields) && isset($this->_fields[$name]))
                || ($this->getOption(xPDO::OPT_HYDRATE_RELATED_OBJECTS)
                    && ((array_key_exists($name, $this->_composites) && isset($this->_composites[$name]))
                    || (array_key_exists($name, $this->_aggregates) && isset($this->_aggregates[$name]))));
        }

    ORM обертка одного очень популярного движка

    Запостил: Agel_Nash, 22 Июня 2013

    Комментарии (11) RSS

    • Для не-пыхеров: array_key_exists везде лишнее. А так ничего особенного.
      Ответить
      • $ar = array('a'=>'1','b'=>2,'c'=>null,null);
        echo (int)isset($ar['c']);
        echo (int)(array_key_exists('c', $ar) && isset($ar['c']));
        Ответить
        • Оба раза выдало 0 (FALSE).

          В первом случае isset вернет FALSE, т.к. Returns TRUE if var exists and has value other than NULL, FALSE otherwise. Во втором случае array_key_exists вернет true, но isset опять вернет false.

          Что вы хотели показать этим примером? То, что array_key_exists в данном контексте действительно лишний? :)
          Ответить
          • Именно это и хотел показать. Но даже если ключа нет, то все равно будет 0.
            Ответить
            • Спасибо, кэп.
              Ответить
              • Приведите мне ходя бы 1 пример оправданного использования связки isset по ключу и array_key_exists? Тогда минусуйте сколько влезет. А то складывается впечатление, что говнокод тут только из связок php+html умеют различать.
                Ответить
                • > Приведите мне ходя бы 1 пример оправданного использования связки isset по ключу и array_key_exists?
                  Эм. Что вы до него докопались? Он же так и написал в своем первом комменте - "array_key_exists везде лишнее". Вы где-то видите, что он оправдывает связку array_key_exists + isset?

                  ГК это то место, где даже люди с одинаковым мнением умудряются спорить друг с другом :)
                  Ответить
                • > Приведите мне ходя бы 1 пример

                  Если значение ключа массива обязательно ожидается не равным null, то такая проверка очень даже оправдана. Где isset должно проверяться обязательно во вторую очередь. Хотя я вместо isset юзал бы конструкцию: !== null
                  Ответить
                  • В таком случае достаточно одного isset().
                    Ответить
                    • Он хочет проверить на "элемент есть, и его значение равно null". Здесь одного isset явно недостаточно ;)
                      Ответить
                      • А, действительно, не внимательно прочитал комментарий. Но только тогда нужно не !== null, а === null.
                        Ответить

    Добавить комментарий