Доброго всем дня.
Тема в общем-то уже обсуждалась, на англоязычных сайтах видел сами рассуждения по этому поводу, а именно создания экземпляра класса, но конкретного ответа именно на мой вопрос я не нашел.
Какие минусы использования чисто статических классов?
Я просто смотрю, вот в моей всей системе есть базовые классы, составляющие основу, ну или ядро, как угодно.
Эти классы в общем-то существуют в одном-единственном экземпляре (при поддержке Registry), зачем тогда вообще объекты мне нужны?
Пока что выходит, что я вообще могу обойтись без единого экземпляра класса, просто нет необходимости.
Значит ли это, что я могу отказаться от объектов?
Возможно, я недальновиден и не вижу минусов такой архитектуры, вот в этом то как раз и заключается вопрос.
Спасибо.
Как я понял, класс-наследник исключения пустым должен быть, он нужен только для определения типа исключения, логики там быть не должно. Или это не так?
не обязательно. иногда удобно логику засунуть в наследника \Exception
например, логирование ошибок.
или переопределить __construct для передачи в исключение нужных вам параметров.
+ иногда удобно переопределить магический метод __toString
в общем это решается в каждом отдельном случае индивидуально.
Категорично говорить "логики там быть не должно" нельзя.
Нашел отличные статьи на Хабре, в общем, кажется что-то понял с этими исключениями.
etoYA пишет:
Методов уйма
Как я понял, класс-наследник исключения пустым должен быть, он нужен только для определения типа исключения, логики там быть не должно. Или это не так?
Фишка в том, что вы можете выкидывать свой тип исключений, унаследовав его от \Exception и переопределив необходимые методы. Таким образом, вся обработка ошибок (Подготовка сообщений, логирование, etc...) будет сосредоточена в одном месте, а не по всему коду.
Уже оттуда пойдет большая часть работы системы именно насчет запроса, т.е. роутинг, обработка данных, отдача контента.
Например, где-то там, далеко, есть проверка
Ведь я могу просто вызвать там свою функцию в том месте, которая подготовит сообщение об ошибке, выведет его и exit();
Я прошу прощения, если я кажусь таким вот занудой, просто правда, пока не пойму саму суть будут всякие сомнения по этому поводу
Доброго всем дня. Попытка получить помощь на StackOverflow провалилась, может звезды на небе не так расположились, но на вопрос так внятного ответа я так и не получил, хотя обычно все не так, поэтому решил задать вопрос здесь. Я вообще не активный пользователь, мне документации PHP более чем хватает, но вот такой случай, что нужна помощь сообщества.
Решил вернуться в PHP после некоторого перерыва, начал писать систему "для себя", разработка идет нормально, архитектура системы в общем-то есть, кодовая база тоже есть, но вот остановился на этой проблеме.
Расширение MySQL устарело уже и морально, и вообще, как только можно, вначале я хотел работать с PDO, но пришел к выводу, что это лишнее и что объектно-ориентированного MySQLi мне более чем хватит.
В моей системе все системные ошибки отображаются в виде оформленной страницы, ошибки MySQLi не исключение, поэтому их нужно отлавливать.
В документации продемонстрирован вот такой способ делать это:
Проблема в том, что методов много, в практически каждом из них может произойти ошибка БД, мне придется переопределять все методы таким образом, что бы поймать ошибку.
На StackOverflow мне предложили работать с исключениями, но, честно говоря, я не очень понимаю их концепцию и принцип работы и вообще избегаю их, хотя верю в то, что это удобный инструменты для знающего кодера.
но я не понимаю, чем это в принципе отличается от окружения блоком if/else.
В общем, сам вопрос: есть ли способ получше, чем переопределять большое количество методов или окружать каждый вызов блоком if/else (try/catch(?))
Возможно, проблема в самой концепции моей идеи, в таком случае я так же буду рад услышать более лучший способ работать с БД (?).
Если методы будут вызываться последовательно, то в каждом методе будет получаться экземпляр класса, я думал, что правильнее вынести его в зону видимости всего класса, дабы не создавать лишних переменных и не получать лишний раз экземпляр. (Добавление)
caballero пишет:
смысл понятен - говнокод который надо исправить.
В первом сообщении вообще нет кода, речь об архитектуре.
caballero пишет:
Посмотри любой фреймворк или какое либо другое грамотное решение.
Я придерживаюсь принципа "популярное не значит правильное". Но если на то и пошло, то я как раз таки и посмотрел IP.Board, где первый вариант и используется.
caballero пишет:
мы говорим не о жизни а о програмировании. Для обсуждения житейских проблем есть социальные сети и хомячковые форумы.