Почему мое исключение не поймано поймать?
У меня есть код, похожий на этот
# 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.