Я пытаюсь реализовать свою собственную обработку исключений в моем новом проекте 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);
}
}
Другими словами. Где правильное место, чтобы поймать все исключения, которые я выбрасываю?