В стандартах сказано, что исключения должны распространяться на одно из исключений PHP SPL. Мое первое предположение будет заключаться в том, что это какое-то исключение RuntimeException.
IMO, это будет InvalidArgumentException, потому что аргумент, переданный автозагрузчику, недействителен (он указывает недопустимое имя класса). Хотя я не уверен в этом, поскольку документы, похоже, указывают, что это следует использовать для аргументов недопустимого типа.
- personDaveRandom  schedule10.08.2012
comment
Я согласен; из автозагрузчика это было бы недопустимым аргументом. но что, если вы выдаете исключение после проверки имени класса с помощью class_exists()?
- persongawpertron  schedule10.08.2012
comment
@gawpertron снова вы сделаете class_exists("MyClass"), где вы передадите в качестве аргумента, если класс не существует, тогда бросьте InvalidArgument, иначе RuntimeException я думаю, что это хорошо бросить ..
- personGntem  schedule10.08.2012
comment
RuntimeException говорит Exception thrown if an error which can only be found on runtime occurs. - я не согласен с этим из-за ошибки class-not-found. Если класс не существует, это может быть обнаружено до выполнения. Но это зависит от вашего определения обнаружения - руководство немного неясно по этому поводу. Я лично считаю, что имеет больше смысла бросать InvalidArgumentException, потому что независимо от того, пытаетесь ли вы выполнить автозагрузку или просто выполняете class_exists(), переданная вами строка представляет недопустимое имя класса и, следовательно, является недопустимым аргументом.
- personDaveRandom  schedule10.08.2012
comment
ознакомьтесь с этим сообщением в блоге: codeutopia.net/blog/2011/05/06/ Это может дать вам некоторые подсказки.
- personXerkus  schedule11.08.2012
comment
Я тоже сталкивался с этим. Это, безусловно, помогает, когда использовать типы исключений.
- persongawpertron  schedule14.08.2012
comment
@DaveRandom каково ваше определение среды выполнения? у вас есть пример проверки существования класса до выполнения?
- persongawpertron  schedule14.08.2012
comment
Ну, я бы интерпретировал это довольно буквально - время, в которое (или во время которого) выполняется программа. В PHP это имеет тенденцию быть чрезвычайно недолговечным из-за самой природы того, что он делает. Если ваше приложение статично и разработано только вами, вы (или ваша среда IDE) можете определить, существует ли класс, посмотрев, существует ли он. Чем больше я думаю об этом, если вы беспокоитесь о том, чтобы проверить, существует ли класс, вы, по-видимому, разрешаете гораздо более динамичное поведение, и RuntimeException на самом деле может быть более подходящим. Но если вы переусердствуете, то все будет ошибкой времени выполнения.
- personDaveRandom  schedule14.08.2012
Если вы получаете имя класса в качестве аргумента метода и пытаетесь загрузить этот класс в том же методе, вам следует использовать исключение InvalidArgumentException.
Если вы получаете имя класса из значения поля или из метода, вам следует использовать RuntimeException
Если бы автозагрузки не существовало, PHP выдал бы RunTimeException, верно? Таким образом, ваш загрузчик должен сделать то же самое, если он не находит класс. (Это ЕСЛИ вы пишете свой собственный автозагрузчик). В соответствии со стандартом кодирования ZF2 он должен генерировать исключение RunTimeException, которое находится ВНУТРИ пространства имен исключений загрузчика.
Таким образом, если ваш загрузчик находится в My\Loader, ваше исключение во время выполнения будет в My\Loader\Exception\RunTimeException.
InvalidArgumentException
, потому что аргумент, переданный автозагрузчику, недействителен (он указывает недопустимое имя класса). Хотя я не уверен в этом, поскольку документы, похоже, указывают, что это следует использовать для аргументов недопустимого типа. - person DaveRandom   schedule 10.08.2012class_exists()
? - person gawpertron   schedule 10.08.2012class_exists("MyClass")
, где вы передадите в качестве аргумента, если класс не существует, тогда бросьтеInvalidArgument
, иначеRuntimeException
я думаю, что это хорошо бросить .. - person Gntem   schedule 10.08.2012RuntimeException
говоритException thrown if an error which can only be found on runtime occurs.
- я не согласен с этим из-за ошибки class-not-found. Если класс не существует, это может быть обнаружено до выполнения. Но это зависит от вашего определения обнаружения - руководство немного неясно по этому поводу. Я лично считаю, что имеет больше смысла бросатьInvalidArgumentException
, потому что независимо от того, пытаетесь ли вы выполнить автозагрузку или просто выполняетеclass_exists()
, переданная вами строка представляет недопустимое имя класса и, следовательно, является недопустимым аргументом. - person DaveRandom   schedule 10.08.2012RuntimeException
на самом деле может быть более подходящим. Но если вы переусердствуете, то все будет ошибкой времени выполнения. - person DaveRandom   schedule 14.08.2012