Почему мое исключение не поймано поймать?

У меня есть код, похожий на этот

# Try to import file
try
{
    DataManager::fileImport($_FILES['datafile']['tmp_name'], 
                            $_POST['zones'], $_POST['statuses']);
}
catch(Exception $e)
{
    print 'Herp.';
    $response->body = Helpers::getVarDump($e);
}

DataManager::fileImport - это буквально однострочная функция, которая генерирует нормальное исключение:

static function fileImport($filepath, $zones, $statuses)
{
    throw new Exception('SOME EXCEPTION');
}

И все же я получаю

Неустранимая ошибка: исключить исключение "Исключение" с сообщением "НЕКОТОРЫЕ ИСКЛЮЧЕНИЯ"...

Из блока try. Также "Герп". никогда не печатается. Почему исключение не вызывает блокирующий блок?


EDIT: Я должен упомянуть, что я использую Tonic и PHP 5.3.9

ИЗМЕНИТЬ СНОВА: Здесь DataManager (с именами, замененными на... для анонимности) http://pastebin.com/daHWBJDC

Ответы

Ответ 1

Решение

Я забыл указать use \Exception; в файле, содержащем try/catch.

Pondering

Я знаю, что это преднамеренно, что каждое пространство имен в PHP должно определять свое собственное исключение по многим причинам, но мне все же кажется странным, что catch(Exception e) не вызывал ошибок, когда Exception в этом контексте не был определен. Если бы я написал new Exception(), я получил бы ошибку.

Хорошо, по крайней мере, я кое-что узнал.

Ответ 2

Странно. Если я запустил этот код, я получаю "Herp."

<?php

class DataManagerTest {
    static function fileImport($filepath, $zones, $statuses)
    {
        throw new Exception('SOME EXCEPTION');
    }
}

# Try to import file
try
{
    DataManagerTest::fileImport("param1","param2","param3");
}
catch(Exception $e)
{
    print 'Herp.';
}


?>

Ответ 3

У вас может быть проблема с вашим классом DataManager, потому что я скопировал ваш код, адаптировал его для запуска, и я получаю обработанное исключение... Проблема в другом месте...

class DataManager {
    static function fileImport($filepath, $zones, $statuses){
        throw new Exception('SOME EXCEPTION');
    }
}

try{
    DataManager::fileImport('', '', '');
}catch(Exception $e){
    print 'Herp.';
}

Результаты в

Herp.