Форум программистов, компьютерный форум, киберфорум
Наши страницы

PHP

Войти
Регистрация
Восстановить пароль
 
S_kepti_k
14 / 2 / 0
Регистрация: 19.09.2012
Сообщений: 90
#1

Exception в пространстве имен - PHP

06.02.2018, 02:50. Просмотров 118. Ответов 3
Метки нет (Все метки)

Взял такой пример с мануала
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
function inverse($x) {
    if (!$x) {
        throw new Exception('Деление на ноль.');
    }
    return 1/$x;
}
 
try {
    echo inverse(5) . "\n";
    echo inverse(0) . "\n";
} catch (Exception $e) {
    echo 'Выброшено исключение: ',  $e->getMessage(), "\n";
}
Если данный код вставить в файл index.php, без пространства имен, то все работает корректно.
Если код вставить в файл Basket.php, где первая строка
PHP
1
namespace Basket;
Уже перестает работать? как правильно использовать Exception в пространстве имен?
Выдает такую ошибку
Fatal error: Uncaught Error: Class 'Basket\Exception' not found in D:\xampp\htdocs\skep\Basket\Basket.class.php:30 Stack trace: #0 D:\xampp\htdocs\skep\Basket\Basket.class.php(37): Basket\inverse(0) #1 D:\xampp\htdocs\skep\index.php(43): require_once('D:\\xampp\\htdocs...') #2 [internal function]: myAutoload('Basket\\Basket') #3 D:\xampp\htdocs\skep\index.php(56): spl_autoload_call('Basket\\Basket') #4 {main} thrown in D:\xampp\htdocs\skep\Basket\Basket.class.php on line 30
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2018, 02:50
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Exception в пространстве имен (PHP):

Ошибка Uncaught exception - PHP
Привет. При генерации исключений возвращается fatal error. Пример кода (прямо вначале файла index.php, если что): try { $a = 0; ...

Коллизия имен - PHP
Как решить проблему обработки массива POST когда имена в форме одинаковые ? ------------------------------------------------------ ...

Динамические пространства имен - PHP
Почему я не могу в скрипте использовать динамические пространства имен? А именно использовать такую конструкцию $namemod =...

Присвоение имен в цикле - PHP
Здравствуйте. Нужна помощь. Есть скрипт - ответы на вопросы. Писал сам. Короче смысл такой, в БД хранятся вопросы, к каждому вопросу нужно...

Где выполняются PHP- скрипты в отдельном адресном пространстве или в адресном пространстве сервера? - PHP
Кто знает где выполняются PHP- скрипты в отдельном адресном пространстве или в адресном пространстве сервера?

Бесконечный цикл и exception - PHP
Встал у меня вопрос: что если в бесконечном цикле будет ошибка и скрипт конечно остановится, каким образом обработать так, чтобы он ловя...

3
Зверушь
397 / 316 / 52
Регистрация: 01.05.2010
Сообщений: 1,570
06.02.2018, 09:27 #2
PHP
1
throw new \Exception;
и
PHP
1
catch (\Exception $e)
Exception можно сказать находится в корне всех пространств имеет, и если вы используете пространства имен, то нужно их указывать даже для встроенных объектов.
1
Jodah
Эксперт PHP
2697 / 2369 / 845
Регистрация: 01.08.2012
Сообщений: 8,390
06.02.2018, 10:45 #3
Exception - это название класса относительно текущего пространства имён. Если оно не указано, значит пространство имён корневое.
\Exception - это абсолютное название класса, вместе с пространством имён.

Т.е. когда вы пишете namespace Basket;, Exception превращается в \Basket\Exception.

Можно использовать абсолютное название класса (как показали выше), можно использовать оператор use:

PHP
1
2
3
4
5
namespace Basket;
 
use Exception;
 
throw new Exception('message');
1
S_kepti_k
14 / 2 / 0
Регистрация: 19.09.2012
Сообщений: 90
06.02.2018, 12:22  [ТС] #4
Зверушь
Jodah
Я вас понял, спасибо за ответ. Попробую вечером, как с работы прийду.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2018, 12:22
Привет! Вот еще темы с ответами:

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

Пространство имен - PHP
Добрый день, я тут сегодня проект выложил для тестирования на сервере, и сразу первая ошибка пространство имен. Покажу на примере: ...

Имя типа или пространства имен отсутствует в пространстве имен - C#
Подскажите решение проблемы. Целиком код:

Имя типа или пространства имен "ProtectedData" отсутствует в пространстве имен System.Security.Cryptography - C#
Такая проблема, пытаюсь собрать проект , но дает ошибки : по идее, они должны идти в комплекте ... поискал в гугле, он он кидает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru