Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
S_kepti_k
14 / 2 / 4
Регистрация: 19.09.2012
Сообщений: 99
1

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

06.02.2018, 02:50. Просмотров 151. Ответов 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
Ответы с готовыми решениями:

Ошибка Uncaught exception
Привет. При генерации исключений возвращается fatal error. Пример кода (прямо...

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

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

Динамические пространства имен
Почему я не могу в скрипте использовать динамические пространства имен? А...

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

3
Зверушь
439 / 349 / 91
Регистрация: 01.05.2010
Сообщений: 1,686
06.02.2018, 09:27 2
PHP
1
throw new \Exception;
и
PHP
1
catch (\Exception $e)
Exception можно сказать находится в корне всех пространств имеет, и если вы используете пространства имен, то нужно их указывать даже для встроенных объектов.
1
Jodah
Эксперт PHP
2850 / 2481 / 1057
Регистрация: 01.08.2012
Сообщений: 8,772
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 / 4
Регистрация: 19.09.2012
Сообщений: 99
06.02.2018, 12:22  [ТС] 4
Зверушь
Jodah
Я вас понял, спасибо за ответ. Попробую вечером, как с работы прийду.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2018, 12:22

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

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

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


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

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

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