为什么我的异常没有被捕获捕获?

2022-08-30 20:26:04

我有一些代码看起来像这样

# 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');
}

然而,我得到

致命错误:未捕获的异常“异常”,并显示消息“某些异常”...

从尝试块。此外,“Herp.”从未印刷过。为什么异常不触发 catch 块?


编辑:我应该提到我正在使用Tonic和PHP 5.3.9

再次编辑:这是DataManager(名称替换为...匿名) http://pastebin.com/daHWBJDC


答案 1

溶液

我忽略了在包含try/catch的文件中指定。use \Exception;

思考

我知道出于多种原因,PHP中的每个命名空间都应该定义自己的异常是有意的,但我仍然觉得很奇怪,当在上下文中没有定义时,没有导致任何错误。如果我要写,我会得到一个错误。catch(Exception e)Exceptionnew 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.';
}


?>

推荐