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

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

<?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 не найден. Есть идеи?

13

Решение

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

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

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

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

20

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]