php异常额外参数

daz*_*azz 17 php

抛出异常时是否可以添加额外的参数?

当我抛出异常时,我发送错误消息,但我还想在额外的参数中发送字段的名称.就像是:

throw new Exception('this is an error message', 'the field');
Run Code Online (Sandbox Code Playgroud)

所以,当我显示消息时,我可以这样做:

show_error($e->getFieldname, $e->getMessage());
Run Code Online (Sandbox Code Playgroud)

Gor*_*don 26

不,您必须使用自己的实现将Exception子类化并添加该方法.

class FieldException extends Exception
{
    protected $_field;
    public function __construct($message="", $code=0 , Exception $previous=NULL, $field = NULL)
    {
        $this->_field = $field;
        parent::__construct($message, $code, $previous);
    }
    public function getField()
    {
        return $this->_field;
    }
}
Run Code Online (Sandbox Code Playgroud)

但实际上,我不是向Exceptions添加方法或属性的朋友.Exception代表的是:在您的应用程序中发生的异常情况."field"属性实际上不是Exception的一部分,而是异常消息的一部分,所以我可能会使用如下正确的消息:

字段foo的错误值.异常的字符串,得到整数

  • @Dazz`新的FieldMessage('message',0,NULL,'field')`.异常的构造函数需要消息,但也允许两个可选参数.更改顺序可能会在重新抛出异常的复杂应用程序中中断异常处理,因此为了确保没有任何中断,您将param添加为第四个(如果您使用该解决方案) (2认同)
  • 这种扩展可能是完全有效的:您可能创建了一张失败的发票(例如)。在这种情况下,您可能希望“PaymentFailedException”(例如)导致调用过程中向客户发送一封电子邮件并拥有“$InvoiceId”,以便它可以附加它,获取客户详细信息等 (2认同)

Chr*_*isB 6

无需添加额外的参数。

你可以像这样抛出一个异常:

throw new Exception("My Exception Text", 1234);
Run Code Online (Sandbox Code Playgroud)

并访问这两个值:

catch (Throwable $t)
{  
    echo var_dump($t);
    echo "Exception: " . $t->getMessage();
    echo "Code: " . $t->getCode();
}
Run Code Online (Sandbox Code Playgroud)