Алексей Потапенко, а что вы собрались ловить от file_get_contents? Это сишная функция, она не выбросит никаких исключений, молча вернет false - и все.
Соберите свои урлы в массив и перебирайте его в цикле. Если ни один не вернет осмысленного - тогда решайте, как дальше жить.
Тем не менее, если в случае любой ошибки выполняется один и тот же сценарий - прерывается выполнение скрипта и возвращается сообщение пользователю - то логично разруливать ошибки именно исключениями, а не кодами возврата.
Системные ошибки, которые не хочется светить, решаются введением подкласса исключений и раздельного перехвата его и всех остальных. Соответственно, с выводом для остальных сообщения "внутренняя ошибка" вместо лишних деталей.
ittakir, если ваши проекты умещаются на экране целиком - что ж не пересобрать...
Если код будет читать не случайный человек, а программист, то простыня инклюдов любой длины займет у него максимум полсекунды на прокрутку вниз.
В результате изменение в одном (возможно, второстепенном) заголовочном файле вынудит пересобираться весь проект. Bad practice.
Никакого смысла "жалеть строчек" в исходниках нет.
Очевидно, в самом интерфейсе ArmyVisitor должен быть заявлен метод visit{Имя того класса, которому принадлежит метод accept} - тогда любой его наследник должен этот метод реализовать, и IDE за этим проследит.
Просто подробное сообщение об ошибке нецензурно, вот и не выводится.
А как цензурно объяснить человеку, кто он, если пытается подключиться к БД, но даже название ее не указывает?
Passionare, так я и ответил, как организовать, просто это не совпало с твоими мечтами. Сделай проект, которым кто-нибудь заинтересуется - тогда и гляди с надеждой на опенсурс. А мечтать о том, какая крутая у тебя идея и как вокруг много желающих над ней пахать, можно столь же бесконечно, сколь и безрезультатно.
Dubrovin, можно, собрав все "длинные" классы, которые получились, отсортировать этот список и оставить только первые символы, отличающие каждый из них от предыдущего. В основном получатся имена не длиннее нескольких символов.
Шли десятилетия, а виндовские штатные дрова для видеокарт так и не умели поддерживать OpenGL из коробки.
Поставьте нормальный драйвер видео от производителя.
Это не С++, это С.
В С++ логично сначала определить класс книги, заодно задав ему оператор сравнения.
Потом, получая данные, определять, относится ли книга к заданному времени, и если да, то заносить ее в вектор объектов класса книга.
Затем отсортировать этот вектор одной командой и вывести циклом.
Dubrovin, я ее и дал вторым вариантом. Ничего не удаляется, берете хэш 7d50b03b3e72815544fb16bdf4bf8c61
и элементарной заменой превращаете его в ndlgbgjbjeniohllkkfbhmbdfkbfocmh
Dubrovin, ну, раз это для вас проблема, лучше обойдитесь символами a-zA-E - будет 32 варианта.
Заменяете каждые 5 бит хэша на соответствующую букву - и все. Просто получится немного подлиннее.
Или, если и это для вас сложно, самый козырной алгоритм: берете hex-строку md5 и тупо заменяете 0-9 на g-p. Получаете строку из одних только букв...
Так в MD5 и нет "цифр и спецсимволов". Хэш - это набор битов. Просто обычно выводят их hex представление.
Можете взять хэш от строки любой популярной функцией и записать его в своей 52-ричной системе.
Надо свести к одной. Пусть в ней у конкретного работника будут нули в половине параметров, компьютер не умается это посчитать. Зато зарплата будет зависеть только от этих параметров, а их уже легко хранить в базе.
+ может быть сразу несколько формул сразу
Совмещение? Тут стоит привязывать зарплату не к работнику, а к штатной единице, отношение их к работникам - многие ко многим. Так легко будет реализовать работу на полставки и обсчет не совпадающих по ставкам отпусков.
Соберите свои урлы в массив и перебирайте его в цикле. Если ни один не вернет осмысленного - тогда решайте, как дальше жить.