Как правильно обрабатывать исключения PHP - PullRequest
0 голосов
/ 23 декабря 2019

Я пытаюсь реализовать свою собственную обработку исключений в моем новом проекте PHP, я еще не столкнулся с ошибками, но боюсь, что моя архитектура неверна, позвольте мне показать вам, что я имею в виду.

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

Итак, я сделал это своим основным классом исключений, который будут расширять все мои пользовательские исключения:

abstract class PickleException extends Exception implements Throwable
{
    abstract protected function handle () : void;
}

И я сделал следующие два исключения, которые на данный момент делают то же самое

class DuplicateFileException extends PickleException
{
    public function handle() : void
    {
        echo $this->getMessage();
    }
}

class InvalidCreationDirectoryException extends PickleException
{
    public function handle() : void
    {
        echo $this->getMessage();
    }
}

Теперь позвольте мне показать, как организована файловая система.

    FileManager -- Interface

        FileSystem -- Abstract class (Parent)

            PHPManager -- Class (Child)

            YamlManager -- Class (Child)

            XMLManager -- Class (Child)

Теперь я знаю, что могу создавать новые исключения в любом из этих классов, но вопрос зависит отгде их ловить ?, пока у меня что-то вроде этого ...

abstract class FileSystem implements FileManager
{
    /**
     * Creates an empty file based on the path, name and extension
     * given.
     *
     * @param string $path
     * @param string $name
     * @param string $extension
     * @throws DuplicateFileException
     * @throws InvalidCreationDirectoryException
     * @return void
     */
    final function makeEmptyFile (string $path, string $name, string $extension) : void
    {
        $file = "$path/$name.$extension";

        if (!file_exists($path)) {
            if (!mkdir($path, 0777, true)) {
                throw new InvalidCreationDirectoryException("Error: Impossible to create directory");
            }
        }

        if (file_exists($file)) {
            throw new DuplicateFileException("Warning: File already exists, aborting");
        }

        touch($file);
    }
}

Другими словами. Где правильное место, чтобы поймать все исключения, которые я выбрасываю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...