自定义异常的默认参数
Default Params for a custom exception
在我的 symfony4 项目中,我想抛出自定义异常,所以我创建了一个异常 Class:
ApiException
namespace App\Utils;
class ApiException extends \Exception
{
private $class;
private $function;
public function __construct(string $message, string $class, string $function, int $code = 0, \Exception $previous = null)
{
$this->class = $class;
$this->function = $function;
parent::__construct($message, $code, $previous);
}
public function __toString()
{
return $this->class.'\'.$this->function.', Line '.$this->line.': '.$this->message;
}
}
抛出异常
throw new ApiException('Please select a date between 1950 and 2050', __CLASS__, __FUNCTION__);
输出
App\Utils\Api\by_year, Line 43: Please select a date between 1950 and 2050
这正是我想要的,但是,我想避免在我的异常抛出中交出 __CLASS__
和 __FUNCTION__
。
我需要在哪里注入这两个参数才能始终可用。在异常中调用它给我 Class 异常的名称和函数名称 Class,而不是 Class 抛出它?
抛出异常时的常见做法是包含完整的回溯,而不仅仅是抛出异常的 class。 PHP 的 Exception
class 有一个本地方法:getTraceAsString
,所以永远不需要手动传入 class 或函数名。您可以修改您的 class 如下:
class ApiException extends \Exception
{
public function __construct(string $message, int $code = 0, \Exception $previous = null)
{
parent::__construct($message, $code, $previous);
}
public function __toString()
{
return $this->getTraceAsString().': '.$this->message;
}
}
如果你只想显示某些级别的回溯,还有一个 getTrace
方法,将步骤 returns 作为一个数组,但在我看来,完整的跟踪总是会更有用。
有关完整示例,请参阅 https://3v4l.org/UHI08
输出几乎与 PHP 显示的未捕获异常相同。
在我的 symfony4 项目中,我想抛出自定义异常,所以我创建了一个异常 Class:
ApiException
namespace App\Utils;
class ApiException extends \Exception
{
private $class;
private $function;
public function __construct(string $message, string $class, string $function, int $code = 0, \Exception $previous = null)
{
$this->class = $class;
$this->function = $function;
parent::__construct($message, $code, $previous);
}
public function __toString()
{
return $this->class.'\'.$this->function.', Line '.$this->line.': '.$this->message;
}
}
抛出异常
throw new ApiException('Please select a date between 1950 and 2050', __CLASS__, __FUNCTION__);
输出
App\Utils\Api\by_year, Line 43: Please select a date between 1950 and 2050
这正是我想要的,但是,我想避免在我的异常抛出中交出 __CLASS__
和 __FUNCTION__
。
我需要在哪里注入这两个参数才能始终可用。在异常中调用它给我 Class 异常的名称和函数名称 Class,而不是 Class 抛出它?
抛出异常时的常见做法是包含完整的回溯,而不仅仅是抛出异常的 class。 PHP 的 Exception
class 有一个本地方法:getTraceAsString
,所以永远不需要手动传入 class 或函数名。您可以修改您的 class 如下:
class ApiException extends \Exception
{
public function __construct(string $message, int $code = 0, \Exception $previous = null)
{
parent::__construct($message, $code, $previous);
}
public function __toString()
{
return $this->getTraceAsString().': '.$this->message;
}
}
如果你只想显示某些级别的回溯,还有一个 getTrace
方法,将步骤 returns 作为一个数组,但在我看来,完整的跟踪总是会更有用。
有关完整示例,请参阅 https://3v4l.org/UHI08
输出几乎与 PHP 显示的未捕获异常相同。