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

    +162

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    $is_active = true;
           try
            {
                $is_active = $this->getIsActive($this->pk_id, true);
            }
            catch (DBModelException $e)
            {
                $is_active = false;
            }

    Довольно хитрый способ проверить является ли объект новым или уже присутствует в базе (название переменной, кстати, тоже крутое).
    Если объект новый, то при обращении к this->pk_id будет брошен DbModelException, который бросается при доступе к несуществующим свойствам объекта. Подразумевается, что несохранённый в базе объект не имеет первичного ключа.

    Запостил: ilovephp, 04 Апреля 2011

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

    • и еще насчет true/false:
      $is_active = false;
             try
              {
                  $is_active = $this->getIsActive($this->pk_id, true);
              }
              catch (DBModelException $e)
              {
              }
      Ответить
      • Ветвь кэтча пропадает зря.
        Ответить
      • Тогда уж так:
        try
        {
          $is_active = $this->getIsActive($this->pk_id, true);
        }
        catch (DBModelException $e)
        {
          $is_active = false;
        }
        Ответить
        • это, конечно, замечательно, что в пхп можно так (хотя лучше бы было нельзя)
          но я считаю дурным тоном обьявлять переменную в блоке (тем более в двух блоках), а пользоваться ею вне этого блока
          Ответить
    • Вырвано из контекста. Вполне вменяемый код, если это часть какого-то метода.
      Ответить
      • Ясен хрен, что это часть какого-то метода. Конкретно - метода валидации формы(в свою очередь находится в самой модели, гыгы)
        Где он вменяемый - непонятно.
        На пальцах: метод getIsActive(почему не isActive?) принимает на вход данные, которые ему заранее могут быть известны, и являются свойством класса. Он нигде не вызывается с данными, отличными от this->pk_id (разумеется, это неочевидно из данного куска).
        Казалось бы, можно жрат, но тут возникает очень интересный вопрос - если ожидается, что доступ к полю может вызвать исключение, то почему бы его не отловить на более низком уровне - в самом getIsActive?
        Ответить

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