Php 通过类向上传递异常时未捕获的异常
我有一个名为User的类,它在try/catch块中构造时调用自己的方法之一setUsername()。如果setUsername()失败,它将抛出异常: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
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--是的,应该有一个分号。哎呀。