1

私は現在status、操作の失敗を表す数値であるフィールドを返す WebService とやり取りするためのコード コードを書いています。、、、 の20 のstatus値があります。コードに基づいてどのように例外を適切にスローしますか?10111220...37

20 個以上 CodeXXGatewayException(コードはどこにありますか)を作成XXするのは大変な作業のように思えますが、確かにきちんとした解決策ではありません。

class Code10GatewayException
{
    public function __construct()
    {
        parent::__construct('Generic Error.', 10);
    }
}

class Code11GatewayException
{
    public function __construct()
    {
        parent::__construct('Invalid charset.', 11);
    }
}

// Throw the exception
$class = "My\Exception\Client$statusException";
throw new $class;

の例外ファクトリはどう$reasonMapですか?(通常) 人々は大きなプロジェクトで多数の例外にどのように対処しますか?

class GatewayException extends \RuntimeException
{
    public function __construct($code, $reason)
    {
        parent::__construct($reason, $code);
    }
}

class ExceptionFactory
{
    public static $reasonMap = array(
        '10' => 'Generic error',
        '11' => 'Invalid charset',
        // ...
    );
    public static function fromStatus($status)
    {
        return new GatewayException($status, self::$reasonMap[$status] . '.');
    }
}

// Throw the exception
throw new ExceptionFactory::fromStatus($status);
4

1 に答える 1

-2
<?php
class GatewayException extends Exception
{
    protected $reasonMap = array(
        10 => 'Generic error'
    );

    public function __construct($code)
    {
        $this->code = $code;
        $this->message = $this->reasonMap[$code];
    }
}

...

throw new GatewayException(10);
于 2013-07-16T10:27:18.607 に答える