Возможно ли использовать несколько классов в одном пространстве имен в одном файле
Возможно ли использовать несколько классов в одном пространстве имен в одном файле? Я хочу сделать что-то вроде этого:
<?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 не найден. Есть какие-нибудь идеи?
1 answers
Я не думаю, что в этом есть что-то синтаксически неправильное, но я не думаю, что какие-либо PSR-4совместимые загрузчики auot смогут найти класс, которого нет в его собственном выделенном файле, поскольку стандарт заключается в том, что имя файла, к которому принадлежит класс, совпадает с именем самого класса:
- Имя конечного класса соответствует имени файла, заканчивающемуся на .php. Имя файла ДОЛЖНО соответствовать регистру имени завершающего класса.
Из-за этого, если вы хотите использовать этот подход, вам нужно будет убедиться, что include
этот файл класса вручную, когда вам понадобится определить эти классы (в основном, в любое время, когда вы захотите бросить/поймать любое из этих исключений).
Альтернативой является определение классов, которые вы хотите разместить внутри файла другого класса, в котором вы абсолютно уверены, что всегда будет загружаться автоматически перед любым вызовом любых операторов new CustomExceptionN
. Вы, вероятно, найдете в в большинстве случаев гораздо сложнее запомнить, что перед использованием Class1
необходимо сначала выполнить автоматическую загрузку Class2
, чем просто следовать стандарту и включать каждый класс в свой собственный файл, расположенный по правильному пути к пространству имен.