Php 通过类向上传递异常时未捕获的异常

Php 通过类向上传递异常时未捕获的异常,php,class,oop,exception,Php,Class,Oop,Exception,我有一个名为User的类,它在try/catch块中构造时调用自己的方法之一setUsername()。如果setUsername()失败,它将抛出异常: class User { private $username; public function __construct($input_username) { try { $this->setUsername($input_username); } catch(Ex

我有一个名为User的类,它在try/catch块中构造时调用自己的方法之一setUsername()。如果setUsername()失败,它将抛出异常:

class User {
    private $username;

    public function __construct($input_username) {
        try {
            $this->setUsername($input_username);
        } catch(Exception $e) {
            throw $e;
        }
    }

    private function setUsername($username) {
      if(1 != 0)
         throw new Exception("1 does not equal 0!!!");
      $this->username = $username;
    }

}
然后,我在一个外部函数中,在一个单独的文件中,在它自己的try/catch块中创建一个新的用户。它应该捕获从用户类构造函数传递的异常:

namespace UserController;

function createUser(){
    try {
        $user = new \User('sample-user');
    } catch(Exception $e) {
        echo $e->getMessage();
    }
}

那么,为什么我仍然收到一个“未捕获异常”错误?

似乎我在实例化类的文件顶部缺少了一条语句,因为它是命名空间的。在名称空间声明之后,需要说明:

use \Exception;

尝试用
\Exception
替换
异常的所有实例。我猜实例化用户的代码在一个命名空间中,这意味着
Exception
引用了该命名空间中不存在的类。它不应该是
echo$e->getMessage()?@Jeto——你说得对。实例化用户的代码位于命名空间中。我只是在我的问题上加了这个。但是,它似乎没有纠正您在
抛出新异常(“1不等于0!!!”)之后忘记了“;”的问题
@Felippe Duarte--是的,应该有一个分号。哎呀。