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

    +154

    1. 1
    2. 2
    3. 3
    4. 4
    $this->template_model = BaseCommunicationType::model()->findByAttributes(array('template' => $this->template));
    if(!$this->template_model === NULL) {
    		throw new Exception("Template name is wrong", 1);	
    }

    Угадайте, что будет из исключением?

    Запостил: boddicheg, 06 Ноября 2014

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

    • Вроде как рекомендуют делать throw new My_Exception("что-то-там"), хотя пох, конечно же.
      Ответить
      • и еще cause exception
        Ответить
      • use \Yoba\Template\Exception;
        Ответить
      • Это рекомендуют если хочешь ловить и делать exception filtering.
        Так как примерно никто в мире не умеет правильно использовать эксепшены, то так почти никтоне делает
        Ответить
        • Почти... для этого кода нужно было просто дать знать, что шаблона нет, и прервать работу консольного приложения
          Ответить
          • Вы сейчас попадете мне на медовое место, и я прочту Вам лекцию про два разных вида эксепшенов:

            * Тех, которые часть контракта и которые нужно ловить (checked exceptions, в терминологии Java)
            * Тех, которые символизируют НАРУШЕНИЕ контракта, и ловить которые не нужно, а нужно дать им долететь до верху стека и сдохнуть (рантайм в терминологии джавы)

            В первом случае нам нужно наследоваться, во втором -- нет.

            Сравните (синтаксис пыха плохо помню, но кажется так):
            //Case 1:
            function deleteFile($fileName) {
              if (! file_exists($fileName)) {
                  throw new FileDoesNotExist($fileName); //лови меня
                 }
            }
            
            // Case 2
            /**
            * @param id: пожалуйста передайте сюда unsigned int
            **/
            function someFunc($id) {
              if ($id < 0) {
                  throw new Exception("ты нарушил контракт, иди в жопу"); //НЕ лови меня
                 }
            }
            Ответить
      • по сути, вы унаследовались от стандартного и дали имя классу My_Exception. Ну круто че:)
        Ответить
    • >что будет из исключением?
      Ничего.
      Ответить
      • оно никогда не выполнится, даже если $this->template_model будет NULL. А все из-за !
        Ответить

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