У меня есть код, который выглядит так
# 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
– это буквально однострочная функция, которая DataManager::fileImport
нормальное исключение:
static function fileImport($filepath, $zones, $statuses) { throw new Exception('SOME EXCEPTION'); }
И все же я получаю
Неустранимая ошибка: исключить исключение «Исключение» с сообщением «НЕКОТОРЫЕ ИСКЛЮЧЕНИЯ» …
Из блока try. Также «Герп». никогда не печатается. Почему исключение не вызывает блокировку catch?
EDIT: Я должен упомянуть, что я использую Tonic и PHP 5.3.9
EDIT AGAIN: вот DataManager (с именами, замененными на … для анонимности) http://pastebin.com/daHWBJDC
Я забыл указать use \Exception;
в файле, содержащем try / catch.
Я знаю, что преднамеренно, что каждое пространство имен в PHP должно определять свое собственное исключение по многим причинам, но мне все же кажется странным, что catch(Exception e)
не вызывал ошибок, когда Exception
в этом контексте не было определено. Если бы я написал new Exception()
я получил бы ошибку.
Хорошо, по крайней мере, я кое-что узнал.
Странный. Если я запустил этот код, я получу «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.'; } ?>
У вас может быть проблема с вашим классом DataManager, потому что я скопировал ваш код, адаптировал его для запуска, и я получил обработку исключений … Проблема в другом месте …
class DataManager { static function fileImport($filepath, $zones, $statuses){ throw new Exception('SOME EXCEPTION'); } } try{ DataManager::fileImport('', '', ''); }catch(Exception $e){ print 'Herp.'; }
Результаты в
Herp.