wyrihaximus / json-throwable
📠 JSON 编码和解码可抛出对象和异常
4.2.0
2024-05-09 13:10 UTC
Requires
- php: ^8 || ^7.4
- doctrine/instantiator: ^1.0.5 || ^2.0.0
- thecodingmachine/safe: ^1.3.3 || ^2.0.0
- wyrihaximus/json-utilities: ^1.3.1
Requires (Dev)
- wyrihaximus/test-utilities: ^3.3.1 || ^6.0.0
README
安装
通过 Composer 安装,使用以下命令,它将自动检测最新版本并将其与 ~
绑定。
composer require wyrihaximus/json-throwable
使用方法
本包包含四个函数
throwable_json_encode
- 将任何可抛出对象编码为 JSON 字符串throwable_encode
- 将任何可抛出对象编码为数组throwable_json_decode
- 将throwable_json_encode
格式的 JSON 字符串解码回原始的Exception
或Error
throwable_decode
- 将throwable_encode
格式的数组解码回原始的Exception
或Error
注意
在使用此包时有一些需要注意的问题。
- 编码函数都会丢弃跟踪信息。
- 因为我们不能覆盖跟踪信息,所以当可用时,会在
originalTrace
属性中放置一个新的跟踪信息。 - 任何之前的
Throwable
也会被编码和解码,但始终使用throwable_json_*
。
获取原始跟踪的示例,这不是最优的,但它是可行的
<?php declare(strict_types=1); final class ExposeTraceException extends Exception { /** @var array<array<string, mixed>> */ private array $originalTrace = []; /** * @return array<array<string, mixed>> */ public function getOriginalTrace(): array { return $this->originalTrace; } }
或者您可以使用此包提供的 trait
<?php declare(strict_types=1); use WyriHaximus\ExposeTraceTrait; final class ExposeTraceException extends Exception { use ExposeTraceTrait; }
包括额外的属性
如果您的可抛出对象包含任何希望在编码时携带的属性,实现 AdditionalPropertiesInterface
并返回一个包含所有希望包含在编码中的属性的列表
<?php declare(strict_types=1); use WyriHaximus\AdditionalPropertiesInterface; use WyriHaximus\ExposeTraceTrait; final class AdditionalPropertiesException extends Exception implements AdditionalPropertiesInterface { use ExposeTraceTrait; private int $time; public function __construct(int $time) { parent::__construct('Additional properties exception raised'); $this->time = $time; } public function time(): int { return $this->time; } /** * @return array<string> */ public function additionalProperties(): array { return ['time']; } }
编码/解码数组类型提示
当您调用 throwable_encode
或 throwable_decode
时,数组的(返回)类型提示具有以下签名
array{class: class-string<Throwable>, message: string, code: mixed, file: string, line: int, previous: string|null, originalTrace: array<int, mixed>, additionalProperties: array<string, string>}
此签名不是由 PHP 强制执行,但像 PHPStan
或 Psalm
这样的工具将使用它来从静态分析的角度断言类型安全。
贡献
有关详细信息,请参阅 CONTRIBUTING。
许可
版权所有 2020 Cees-Jan Kiewiet
特此授予任何获得此软件及其相关文档副本(“软件”)的人免费使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,以及允许向软件提供方提供软件的人这样做,前提是
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者都不应对任何索赔、损害或其他责任负责,无论该索赔、损害或其他责任是由合同、侵权行为或其他方式引起的,与软件或其使用或其他交易有关。