Подтвердить что ты не робот

Возможно ли использовать несколько классов под одним и тем же пространством имен, в том же файле

Возможно ли использовать несколько классов в одном и том же пространстве имен в том же файле? Я хочу сделать что-то вроде этого:

<?php
  namespace MyNamespace\Helpers\Exceptions

  use Exception;

  class CustomException1 extends Exception{}

  class CustomException2 extends Exception{}

  class CustomException3 extends Exception{}

чтобы избежать использования одного файла для каждого настраиваемого класса исключений. Проблема в том, что когда я пытаюсь использовать в другом классе одно из специальных исключений,

use MyNamespace\Helpers\Exceptions\CustomException1;

класс CustomException1 не найден. Любые идеи?

4b9b3361

Ответ 1

Я не думаю, что что-то синтаксически неправильно с этим, но я не думаю, что любой PSR-4 совместимый auotloaders сможет найти класс, который не является в нем собственным выделенным файлом, так как стандарт состоит в том, что имя файла, к которому принадлежит класс, совпадает с именем самого класса:

  1. Конечное имя класса соответствует имени файла, заканчивающегося на .php. Имя файла ДОЛЖНО соответствовать случаю завершающего имени класса.

Из-за этого, если вы хотите использовать этот подход, вам нужно будет обеспечить include этот файл класса вручную, когда вам понадобятся эти классы, которые нужно определить (в основном, когда вы хотите бросить/уловить любое из этих исключений).

Альтернативой является определение классов, которые вы хотите использовать внутри файла другого класса, который вы абсолютно уверены, всегда будет автоматически загружаться до любого вызова каких-либо операторов new CustomExceptionN. Вероятно, вы обнаружите, что в большинстве случаев гораздо больше проблем с попыткой вспомнить, прежде всего, чтобы автозагрузка Class1 перед использованием Class2, чем просто следовать стандарту и включать каждый класс в свой собственный файл, расположенный по адресу правильный путь пространства имен.