smpita/typeas

静态分析中的类型控制简易化

v3.1.1 2024-03-13 16:42 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status FOSSA Status Total Downloads

在进行静态分析时,你是否在为处理混合签名而苦恼?

Smpita/TypeAs 将为你提供轻松控制类型的解决方案。

安装

您可以通过 composer 安装此包。

composer require smpita/typeas

用法

有关当前方法和签名的列表,请参阅 SIGNATURES

通用用法

SIGNATURES#resolving

传递一个 $mixed,如果 $mixed 无法转换,将抛出 TypeAsResolutionException

use Smpita\TypeAs\TypeAs;

$typed = TypeAs::string($mixed);

如果您想抑制抛出异常,请提供默认值。

use Smpita\TypeAs\TypeAs;

$typed = TypeAs::string($mixed, '');

类方法

SIGNATURES#class

class() 的签名略有不同,因为您需要指定期望的类。

use Smpita\TypeAs\TypeAs;

$typed = TypeAs::class(Target::class, $mixed);

您仍然可以提供默认值。

use Smpita\TypeAs\TypeAs;

$typed = TypeAs::class(Target::class, $mixed, new \StdClass);

注意:在 v2.0.0 之前的版本中,签名的顺序不同。

use Smpita\TypeAs\TypeAs;

$typed = TypeAs::class($mixed, Target::class, $default);

数组方法

SIGNATURES#array

默认情况下,array() 将将非迭代对象包装成类似 (array) $mixed 的形式,而不是抛出异常。

use Smpita\TypeAs\TypeAs;

TypeAs::array('example') === ['example'];

这不一定总是合适的,因此您可以选择关闭包装以获取异常。

use Smpita\TypeAs\TypeAs;

$typed = TypeAs::array($mixed, false);

或者,您也可以提供一个默认值。

use Smpita\TypeAs\TypeAs;

$typed = TypeAs::array($mixed, []);

可空类型

v2.3.0 开始,如果希望在抛出异常而不是接收 null 时,每个类型方法都有一个可空的对应方法。

use Smpita\TypeAs\TypeAs;

TypeAs::nullableString(new \stdClass) === null

解析器

SIGNATURES#resolver-registration

v2.4.0 开始,您可以指定自己的自定义解析器。

每个类型都有一个位于 Smpita\TypeAs\Contracts 的关联接口,您可以实现该接口来创建自己的解析器。

简单实现该接口,然后注册解析器或在使用解析器方法时使用它。

接口

  • Smpita\TypeAs\Contracts\ArrayResolver
  • Smpita\TypeAs\Contracts\BoolResolver
  • Smpita\TypeAs\Contracts\ClassResolver
  • Smpita\TypeAs\Contracts\FloatResolver
  • Smpita\TypeAs\Contracts\IntResolver
  • Smpita\TypeAs\Contracts\NullableArrayResolver
  • Smpita\TypeAs\Contracts\NullableClassResolver
  • Smpita\TypeAs\Contracts\NullableFloatResolver
  • Smpita\TypeAs\Contracts\NullableIntResolver
  • Smpita\TypeAs\Contracts\NullableStringResolver
  • Smpita\TypeAs\Contracts\StringResolver

创建自定义解析器

use Smpita\TypeAs\Contracts\StringResolver;

class CustomStringResolver implements StringResolver
{
    /**
     * @throws \UnexpectedValueException
     */
    public function resolve(mixed $value, string $default = null): string
    {
        // Your logic here
    }
}

注册自定义解析器

全局

要全局注册解析器,请使用相关的设置方法。在 Laravel 中,建议在 ServiceProvider 的 boot 方法中这样做。

TypeAs::setStringResolver(new CustomStringResolver);

单次使用

$typed = Smpita\TypeAs::string($mixed, null, new CustomStringResolver);

注销自定义解析器

要返回默认值,只需将解析器设置为 null

TypeAs::setStringResolver(null);

要使所有解析器返回默认值,您可以使用 useDefaultResolvers()

TypeAs::useDefaultResolvers();

如果您注册了自定义解析器并希望在单次使用中使用默认解析器,将 null 传递给解析器方法将不起作用。您必须传递默认解析器。

$typed = Smpita\TypeAs::string($mixed, null, new \Smpita\TypeAs\Resolvers\AsString);

辅助函数

SIGNATURES#helpers

v2.5.0 开始,解析器方法在 Smpita\TypeAs 命名空间中有一个相关的辅助方法。辅助方法名称遵循 TypeAs 方法名称,但以 as 开头,并使用 camelCased 格式。

use function Smpita\TypeAs\asString;

$typed = asString($mixed);

弃用

SIGNATURES#deprecations

测试

composer test

变更日志

请参阅 CHANGELOG 以获取有关最近更改的更多信息。

贡献

请参阅CONTRIBUTING以获取详细信息。

安全漏洞

请查阅我们的安全策略了解如何报告安全漏洞。

致谢

许可协议

MIT 许可协议(MIT)。请参阅许可文件以获取更多信息。

FOSSA Status