Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Проверка возможности создания объекта класса
Покинул форум
Сообщений всего: 3
Дата рег-ции: Март 2015
Помог: 0 раз(а)
Привет Всем программистам! Только начинаю общаться с ООП и возникают некоторые вопросы ответы на которые не всегда могу найти - требуется помощь зала, и присутствующих в нём гуру.
Вопрос состоит в следующем. Я создал класс. И хочу создать объект класса. Но в конструкторе класса я проверяю наличие трёх стринговых переменных - ключей, которые передаю в конструктор при создании объекта. Если хотя бы одной из переменных нет или она инвалидна - объект класса не создаётся. Создаётся throw exception который пишет в лог что произошла ошибка. И тут возникает самое главное затруднение, т.к. мой класс используется в стороннем коде программистом, то я для показа каких то ошибок использую метод класса get_info_my_error вызвав который программист увидит ошибку, сформированную в виде массива. Но я не могу показать ошибку, которую вызывает создание объекта без необходимых параметров - ведь объект класса не будет создан и соответственно я уже не смогу обратится к методу объекта чтобы показать ошибку. и нужно либо в блоке catch смотреть что выдается ошибка, соотвественно не в том формате что я обычно выдаю своим классом (не ввиде массива). Поэтому стоит вопрос - я сейчас пробую создать потомка класса в нём в блоке констракт создать объект с теми параметрами что переданы потомку и проверить если нормально создался объект потомка класса - то обращаться к методам класса через объект потомка - ведь он же является extends от родителя значит и все методы работают и сообщение об ошибке я смогу запрашивать у объекта потомка если объект класса в потомке в конструкторе не смогу создать. Как то так.... но я не знаю как это правильно реализовать - может вы подскажите - как это корректно сделать - или поделитесь ссылкой или поправите меня. Может это всё делается намного проще или по другому прошу подсказать. Заранее спасибо.
Привожу код класса и то как создаю объект и пытаюсь проверить при создании - но проверка не проходит ((
Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014
Помог: 10 раз(а)
[+]
Если вам передали фигню в класс - это ошибка программиста стадии разработки. Об этом ему нужно сообщить сразу не наварачивая каких-то get_info_my_error.
Просто бросайте исключение и все.
get_info_my_error - это к ошибкам времени исполнения, и то в некоторых случаях фатальные ошибки можно исключениями.
----- self-banned
vegarulez
Отправлено: 29 Марта, 2015 - 18:28:18
Новичок
Покинул форум
Сообщений всего: 3
Дата рег-ции: Март 2015
Так при таком подходе и объект класса потомка не будет создан и я не смогу обратится через него чтобы показать get_info_my_error программисту использующему мой класс что ошибка такая-то в том формате в котором я ему выдаю все ошибки. (Добавление)
MiksIr пишет:
Если вам передали фигню в класс - это ошибка программиста стадии разработки. Об этом ему нужно сообщить сразу не наварачивая каких-то get_info_my_error.
Просто бросайте исключение и все.
get_info_my_error - это к ошибкам времени исполнения, и то в некоторых случаях фатальные ошибки можно исключениями.
Ну так хочется же красиво ) через $obj->get_info_my_error() в рамках тех описанных в документахе ошибок - которые выдает класс, в формате массива, описать и эту ошибку вызова создания объекта класса.
Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014
Помог: 10 раз(а)
[+]
В рамках документации точно также описываются все исключения, которые методы могут кидать.
----- self-banned
vegarulez
Отправлено: 29 Марта, 2015 - 18:43:39
Новичок
Покинул форум
Сообщений всего: 3
Дата рег-ции: Март 2015
Помог: 0 раз(а)
MiksIr пишет:
В рамках документации точно также описываются все исключения, которые методы могут кидать.
Было бы можно - вопроса бы не было наверное. Дали документацию - сказали написать класс - он должен общаться с другим кодом - который пишут другие люди в стандартной модели взаимодействия уже описанной в документации, в которой и формат ошибок уже задан. Просто все ошибки по формату, а эта будет нет... как вы думаете это обрадует заказчика? - конечно нет. (Добавление)
$this->cnt А слона то я и не приметил ) Спасибо - заработало.
Вопрос - правильно ли я вообще сделал данную реализацию для проверки возможности создания объекта??
MiksIr
Отправлено: 30 Марта, 2015 - 06:07:18
Забанен
Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014
Помог: 10 раз(а)
[+]
Как хотите. Но делаете фигню. За которую ни один "другой" программист вам спасибо не скажет.
Может вы еще системные ошибки решите перехватывать через error_handler, что бы запихнуть их в ваш get_info_my_error? Ну типа, не указал в конструкторе обязательный параметр - ловим, и в массив ошибок, крута.
Вот ошибка использования класса, т.е. ошибка разработки - вполне уместный способ фаталить. И это красивое решение.
Но если охота говнокодить, то решение DeepVarvar должно быть рабочим.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.