Реализации включения файлов в php

172
17 сентября 2018, 10:10

Гуляя по интернету и своей голове, выбрал для себя 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';  

Насколько я вычитал, первый способ будет в разы медленнее второго. Третий способ выглядит намного "красивше" остальных, но нужно как-то определять, что ошибка именно с включением файла и не обрабатывать остальные так же. Второй просто не элегантный и хочется использовать третий, но не знаю, как преодолеть проблему, описанную выше.

Answer 1

Если пишите на фреймворке, то set_error_handler там обычно по дефолту уже установлен, не надо его переписывать.

Если пишите сами, то одним-же инклудом у вас дело не закончится? Реализуйте какой-нить общий класс или функцию, например my_include(), и в ней реализуйте второй способ, и потом просто вызывайте my_include('my_file'); (будут проблемы с видимостью, но надеюсь у вас инклуды - это назависимые файлы, иначе придется обернуть все это дело в контейнер).

По поводу проблемы, вам-же не обязательно выкидывать Exception в my_include. Делаем класс logs, и при ошибках обращаемся к нему, а он в свою очередь может вызывать ваш Exception с нужным Вам текстом.

P.S. В дальнейшем вы можете такую систему развить и привинчивать ко всему что только есть, там вы получите полный контроль над своим проектом, потом на проде можно будет в классе logs добавить запись в файл, и теперь мы будем знать кто, когда, где и какой получал эксепшн.

READ ALSO
Как использовать system(wmic) в DLL?

Как использовать system(wmic) в DLL?

Пишу первую DLL (учусь), и вопрос, как использовать эту функцию?

209
C++ сигнатуры методов

C++ сигнатуры методов

Мой уровень С++ но начальном этапе и у меня возник вопросКак вообще можно что-то понять из этой сигнатуры метода?

181