theiconic/synopsis

PHP 库,用于生成 PHP 对象或值的语言无关描述

v1.0.5 2020-05-15 12:09 UTC

README

PHP 库,用于生成 PHP 对象或值的语言无关描述

Build Status Coverage Status Scrutinizer Code Quality Latest Stable Version Total Downloads License

目的

此库可以用于生成 PHP 变量或对象的语言无关描述,然后可以将这些描述发送到另一个系统,例如用于调试、监控和检查。

它生成了一种标准化的表示形式,可以轻松地以不同的方式格式化。

例如,可能的用例包括

  • 将数据与日志消息一起发送到日志服务
  • 将调试数据发送到调试/检查工具
  • 格式化异常,包括它们的跟踪和跟踪调用中的参数
  • 通过标准化的格式化程序在不同通道上输出数据(例如终端、Web 等)

设置(通过 Composer)

只需在 composer 中导入库

composer require theiconic/synopsis

基本用法

您需要首先实例化工厂

$factory = new TheIconic\Synopsis\Factory();

现在您可以为任何值生成摘要

class MyClass
{
    public $myProp = 1;
}

$myObject = new MyClass();
$myArray = [
    'string' => 'Hello World!',
    'integer' => 1,
    'boolean' = true,
];

$objectSynopsis = $factory->synopsize($myObject);
$arraySynopsis = $factory->synopsize($myArray);

synopsize() 的每次调用都会生成一个 AbstractSynopsis 实例,该实例描述了传入的值。

现在使用其中一个格式化程序以您可以通过传输发送或由其他组件使用的方式格式化这些数据。

$formatter = new TheIconic\Synopsis\Formatter\ArrayFormatter();
$formatter->format($objectSynopsis);
/*
 * [
 *     'type' => 'MyClass',
 *     'length' => 1,
 *     'value' => ''
 *     'children' => [
 *         'myProp' => [
 *             'type' => 'integer',
 *             'length' => 1,
 *             'value' => 1,
 *         ]
 *     ]
 * ]
 */
 
$formatter->format($arraySynopsis);
/*
 * [
 *     'type' => 'array',
 *     'length' => 3,
 *     'value' => ''
 *     'children' => [
 *         'string' => [
 *             'type' => 'string',
 *             'length' => 12,
 *             'value' => 'Hello World!',
 *         ]
 *         'integer' => [
 *             'type' => 'integer',
 *             'length' => 1,
 *             'value' => 1,
 *         ],
 *         'string' => [
 *             'type' => 'boolean',
 *             'length' => 4,
 *             'value' => 'true',
 *         ]
 *     ]
 * ]
 */

对象摘要

在摘要对象时,工厂会检查是否为对象的类型(即它的类名)注册了自定义摘要类。如果是,则使用特殊摘要类型来摘要对象,结果完全取决于其实施。

可以通过以下方式注册自定义对象类型

$factory->addObjectType(MyClass::$class, MyClassSynopsis::class);

如果没有注册自定义类型,则使用默认对象摘要

为实现了 Iterator 或 IteratorAggregate 接口的对象注册了自定义 IteratorSynopsis 类型

默认对象摘要

默认 ObjectSynopsis 实现将检查对象中的任何公共属性。每个属性都将作为对象的子对象递归摘要。

长度将是找到的公共属性的数量。

将使用对象的类名作为 类型

为了确定 ,实现将按以下顺序检查以下方法的存在和可访问性

  • __toSynopsisValue
  • __toString
  • getId
  • getName

找到的第一个方法将被执行,其返回值将被转换为字符串并用作对象的

默认迭代器摘要

默认 IteratorSynopsis 实现将遍历对象,摘要任何迭代值并将它们添加为子对象。

资源摘要

在摘要 PHP 资源指针时,工厂会检查是否为资源类型(通过 get_resource_type() 确定)注册了自定义摘要类。如果是,则使用该类型。

默认情况下,为某些文件类型和流注册了自定义资源类型,并将使用 stream_get_meta_data() 来确定资源 uri 并将其用作

可以通过以下方式注册自定义资源类型

$factory->addResourceType(MyClass::$class, MyClassSynopsis::class);

异常摘要

异常及其跟踪将以特殊方式摘要,向摘要对象添加额外的属性。

这些可以用于特殊的异常格式化程序。

ExceptionSynopsis

  • 类型:异常类型
  • :异常消息
  • 长度:堆栈跟踪的长度
  • :行号
  • 文件:该文件
  • 子项:摘要后的堆栈跟踪

TraceSynopsis

  • 类型:完整调用的字符串表示形式
  • :文件和行的字符串表示形式
  • 长度:调用参数的数量
  • :行号
  • 文件:该文件
  • :类名
  • 函数:函数/方法名
  • 子项:摘要后的调用参数(如有)

覆盖默认的摘要实现

要覆盖任何类型的行为,只需实现自己的Synopsis类(继承自AbstractSynopsis),并通过工厂注册,例如:

$factory->addType('string', MyStringSynopsis::class);

许可证

THE ICONIC Synopsis库适用于PHP,根据MIT许可证发布。