2010-07-29 58 views
3

我正在尝试使用异常。新手:抛出新的异常 - 我们可以更改异常名称吗?

所以我有这样的:

如果发生什么坏事:

throw new CreateContactException($codigo, $result->msg); 

稍后,我会尝试,如果不正常,美中不足的是:

try 
{ 
    createContact(); 
} 
catch(CreateContactException $e) 
{ 
    $error .= 'An error occurred with the code:'.$e->getCode().' and message:'.$e->getMessage(); 
} 

1) 这项工作?我的意思是,这个getCode()和getMessage()与CreateContactException参数没有关系吗?

2) 我必须在某处创建一个CreateContactException类来扩展Exception吗?我的意思是,我们可以为我们的例外定制名称,而无需创建扩展类?

非常感谢提前, MEM

回答

12

例外,必须仅仅是子类的内置Exception类,这样你就可以创建一个新的像这样:

class CreateContactException extends Exception {} 

试图抛出其他类作为例外将导致错误。

使用不同的名字的好处是,你可以有多个catch块,所以你可以捕捉不同类型的异常,让别人漏网之鱼:

try { 
    // do something 
} 
catch (CreateContactException $e) { 
    // handle this 
} 
catch (DomainException $e) { 
    // handle this 
} 
+0

确定。所以这将是第一件事。创建一个扩展Exception的类。 如果它是空的,为什么不直接使用Exception呢? – MEM 2010-07-29 10:43:59

+0

假设我们创建了这个类,我们如何将getCode和getMessage与我们的throw参数相关联? 我有点失去了我意识到...... 再次感谢 MEM – MEM 2010-07-29 10:45:57

+1

'为什么不使用异常instead' 因为你想更具体的,并能够引发和捕获特定的异常类型。 由于它扩展了Exception,它继承了Exception的所有方法,所以getCode和getMessage都可以工作。 – Mchl 2010-07-29 10:48:37