Не слишком ли я много проверяю фунцкии на ошибки в скрипте?

Nitrat

Новичок
Не слишком ли я много проверяю фунцкии на ошибки в скрипте?

Добрый день.
Подскажите товарищи профессиональные программисты, это нормально по отношению к
производительности/безопастности писать столько проверок на ошибки?

Ниже отрывок простейшего класса - счетчика посещений.

PHP:
class CServVisCount {
   ...

   function __construct () {
      if (!(file_exists($this->data['file_name']))) {
         if (($this->fp = fopen($this->data['file_name'], "wb")) === FALSE)
            exit("Ошибка создания фаила $this->data[file_name]");
         if ((fputs($this->fp, $this->data['visitors'], 
                     $this->data['file_size'])) === FALSE)
            exit("Ошибка записи в фаил $this->data[file_name]");                              
         if ((fclose($this->fp)) === FALSE)
            exit("Ошибка закрытия дескриптора файла $this->data[file_name]");
      } 
      else {
         if (is_writeable($this->data['file_name'])) {
            if (($this->fp = fopen ($this->data['file_name'], "rb+")) === FALSE)
               exit("Ошибка открытия файла $this->data[file_name] для записи");  
            if (($this->data['data_buff'] = fgets($this->fp, 
                                          $this->data['file_size'])) === FALSE)
               exit("Ошибка чтения файла $this->data[file_name]");                                            

   ... и так далее
}
 

FireNet

Новичок
стоп, а почему конструктор не устанавливает никаких атрибутов, а сразу начинает проверку для них?
Разве так можно?

Как мне кажется, лучше написать набор функций или класс для проверки файлов, а не заморачиваться так постоянно. Зачем загромождать класс, у которого другая задача, лишней логикой.
 

denver

?>Скриптер
Nitrat
Это ж параноя в чистом виде. А с другой стороны самый идеальный код. Больше ошибок хороших и разных! Я б тоже так писал будь у меня куча времени на проект.

Вот только:
1. вместо exit лучше юзать throw new CServVisException
2. is_writable как-то не в контексте, может is_readable?
 

Mich

Продвинутый новичёк
Зачем "переопределять" стандартные пшпшные ошибки?
 

denver

?>Скриптер
Mich
Ты хочешь сказать что получать Fatal Error это нормально с точки зрения пользователя? Я уж не говорю о варнингах и нотисах.
 

uliss

Новичок
Можно еще вот так :D
PHP:
$str = "abcdef %d";
if(printf($str, 123) < strlen($str))
    die("a-a-a-a...");
 

Mich

Продвинутый новичёк
Ты хочешь сказать что получать exit("...") это нормально с точки зрения пользователя? Я уж не говорю о программистах.

ЗЫ display_errors
 

denver

?>Скриптер
Mich
Если ты перечитаешь мой пост Nitrat'у, то убедишься что я не хочу так сказать.

ЗЫ. display_errors - опиум для народа
 

Mich

Продвинутый новичёк
ЗЫ. display_errors - опиум для народа
Может ты наконец начнешь выражаться конкретно?

Если ты перечитаешь мой пост Nitrat'у
Это который про исключения? Цитирую себя же:
Зачем "переопределять" стандартные пшпшные ошибки?
в исключения?
Только не отвечай "чтобы не было ворнингов", ок?
 

denver

?>Скриптер
Я не буду писать конкретно, если ты действительно хочешь знать больше, то разницу между исключениями и ошибками узнаешь в мануале. И тут почитать будет не лишним.
 

Mich

Продвинутый новичёк
Спасибо, denver, просвятил. Но я, убогий, не нашел в приведенных тобой ссылках информацию, почему надо послать стандартные ошибки лесом и начать плодить на каждый чих, не побоюсь этого слова, неинформативное, но свое исключение? Я конечно понимаю, что PHP - это 90е и ООП они тогда даже не слышали, но все же никак не могу найти объяснения... Можешь даже не писать конкретно. Я пойму.
 

Frol

Новичок
Mich
вот открываю я файл с помощью fopen.
потом лочю его.
пишу в него данные.
снимаю лок.
закрываю файл.
а теперь представь что файл не открылся.
сколько варнингов выведет пхп?
сколько из них будут информативными?
 

Mich

Продвинутый новичёк
А теперь представь себе, что я проверил, открылся ли файл =) Как пишешь - то и получаешь.

1. Не понимаю, чем тут поможет exit("...")?
1. ...throw exception?
 

denver

?>Скриптер
Mich
представь себе, что я проверил, открылся ли файл
А если проверка показала что не открылся -- что тогда? return false?
А что если функция призвана возвращать false совсем в другом случае?
Ну и в любом случае файл таки не запишется, но теперь уже без единого намека на почему?
 

denver

?>Скриптер
Ты хочешь узнать зачем или сказать что незачем?
Ну конечно же глупые разработчики придумаи исключения чтобы неинформативно дублировать стандартные информативные ошибки.
 

Mich

Продвинутый новичёк
Стиль умудренного опытом гуру тебе не идет. Если у тебя есть аргументы - приведи их.
 

denver

?>Скриптер
Mich
Это офтоп, да и ты прав, не нужно это тебе. Если хочешь открой топик с соответвующим вопросом.
 
Сверху