Гуляя по интернету и своей голове, выбрал для себя 3 толковых способа включения файлов.
Первый:
if(!(@include_once 'file.php'))
throw new MyException('file not found');
Второй:
if(!file_exists('file.php'))
throw new MyException('file not found');
include_once 'file.php';
Третий:
set_error_handler(function() {
// Работа над ошибками
throw new MyException('file not found');
return true;
});
// ........
include_once 'file.php';
Насколько я вычитал, первый способ будет в разы медленнее второго. Третий способ выглядит намного "красивше" остальных, но нужно как-то определять, что ошибка именно с включением файла и не обрабатывать остальные так же. Второй просто не элегантный и хочется использовать третий, но не знаю, как преодолеть проблему, описанную выше.
Если пишите на фреймворке, то set_error_handler
там обычно по дефолту уже установлен, не надо его переписывать.
Если пишите сами, то одним-же инклудом у вас дело не закончится? Реализуйте какой-нить общий класс или функцию, например my_include()
, и в ней реализуйте второй способ, и потом просто вызывайте my_include('my_file');
(будут проблемы с видимостью, но надеюсь у вас инклуды - это назависимые файлы, иначе придется обернуть все это дело в контейнер).
По поводу проблемы, вам-же не обязательно выкидывать Exception
в my_include
. Делаем класс logs
, и при ошибках обращаемся к нему, а он в свою очередь может вызывать ваш Exception
с нужным Вам текстом.
P.S. В дальнейшем вы можете такую систему развить и привинчивать ко всему что только есть, там вы получите полный контроль над своим проектом, потом на проде можно будет в классе logs
добавить запись в файл, и теперь мы будем знать кто, когда, где и какой получал эксепшн.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Пишу первую DLL (учусь), и вопрос, как использовать эту функцию?
Мой уровень С++ но начальном этапе и у меня возник вопросКак вообще можно что-то понять из этой сигнатуры метода?