squirrelphp / types

显式处理 PHP 中的类型强制和执行,以更可预测和更安全的方式处理未知数据。

v1.0 2022-12-13 11:06 UTC

This package is auto-updated.

Last update: 2024-09-13 15:02:55 UTC


README

Software License Packagist Version PHP Version Software License

显式处理 PHP 中的类型强制和执行,以更可预测和更安全的方式处理未知数据。

安装

composer require squirrelphp/types

目录

简介

当从数据库或 API(甚至只是您不熟悉的另一个 PHP 组件)获取值时,您会期望得到某种类型的值,但您可能得到更多或更少的差异。

数据库可能会给您返回字符串 "1" 作为布尔值,或者整数 1,这通常是可以接受的(许多数据库没有布尔类型,所以通常需要一些强制转换)。但是得到字符串 "hello" 或整数 -30 对于布尔值来说不应是可接受的,这很可能是错误的——可能是预期的类型不正确,或者是数据库中检索了错误的字段。

这个小型组件强制转换和执行类型,并且经过全面测试,可以以可预测的方式行为。这通常比使用其他强制转换方法(如显式类型转换 (bool) / boolval())要好,因为这些方法将强制转换任何值,而此组件将拒绝不合理值并抛出 TypeError。它强制转换的值比 PHP 在强制类型模式下的值要少,因为 PHP 为了向后兼容和遗留原因接受了很多可疑的值。

强制行为概述

下面的所有参数标志默认都设置为 false,以实现更保守的强制转换行为。只有在必要时才启用它们。

toBool

  • 总是接受布尔值
  • 接受 "0" 和 "1" 字符串
  • 接受 0 和 1 的整数
  • 只有当 $allowEmptyString 参数设置为 true 时,才允许 "" 字符串
  • 只有当 $allowFloat 参数设置为 true 时,才允许 0.0 和 1.0 的浮点数

toInt

  • 总是接受整数
  • 接受没有小数部分的浮点数和数字字符串
  • 只有当 $allowBool 参数设置为 true 时,才允许布尔值

toFloat

  • 总是接受整数和浮点数
  • 接受数字字符串
  • 只有当 $allowBool 参数设置为 true 时,才允许布尔值

toString

  • 总是接受字符串
  • 接受任何整数和浮点数
  • 只有当 $allowBool 参数设置为 true 时,才允许布尔值
  • 只有当 $allowStringable 参数设置为 true 时,才允许 Stringable 对象

测试值是否可以强制转换

所有这些函数都将 mixed $value 作为它们的第一个参数,并返回 true 或 false

Coerceable::toBool

如果 $value 是以下之一,则返回 true

  • 布尔值
  • 值为 '0' 或 '1' 的字符串
  • 值为 0 或 1 的整数
  • 空字符串 - 只有当 $allowEmptyString 参数设置为 true 时
  • 值为 0 或 1 的浮点数 - 只有当 $allowFloat 参数设置为 true 时

对于任何其他值,它返回 false。

Coerceable::toInt

如果 $value 是以下之一,则返回 true

  • 整数
  • 没有小数部分的浮点数
  • 没有小数部分的数字字符串
  • 布尔值 - 只有当 $allowBool 参数设置为 true 时

对于任何其他值,它返回 false。

Coerceable::toFloat

如果 $value 是以下之一,则返回 true

  • 整数或浮点数
  • 数字字符串
  • 布尔值 - 只有当 $allowBool 参数设置为 true 时

对于任何其他值,它返回 false。

Coerceable::toString

如果 $value 是以下之一,则返回 true

  • 字符串
  • 整数或浮点数
  • 布尔值 - 只有当 $allowBool 参数设置为 true 时
  • Stringable 对象 - 只有当 $allowStringable 参数设置为 true 时

对于任何其他值,它返回 false。

Coerceable::stringToBool

特别测试一个字符串是否可以强制转换为布尔值。 $value 必须是 '0' 或 '1'。

Coerceable::intToBool

特别测试一个整数是否可以强制转换为布尔值。 $value 必须是 0 或 1。

Coerceable::floatToBool

特别测试浮点数是否可以强制转换为布尔值。$value必须是0或1。

Coerceable::floatToInt

特别测试浮点数是否可以强制转换为整数。$value不能有小数部分。

Coerceable::stringToInt

特别测试字符串是否可以强制转换为整数。$value必须是一个没有小数部分的数字字符串。

Coerceable::stringToFloat

特别测试字符串是否可以强制转换为浮点数。$value必须是一个数字字符串。

强制转换一个值

所有这些函数都将混合的$value作为它们的第一个参数,并返回它们所强制转换的类型(或者抛出TypeError)。

Coerce::toBool

如果给定的值可以强制转换,则返回布尔值,请参阅Coerceable::toBool的有效值,如果值不能强制转换,则返回TypeError。

Coerce::toInt

如果给定的值可以强制转换,则返回整数,请参阅Coerceable::toInt的有效值,如果值不能强制转换,则返回TypeError。

Coerce::toFloat

如果给定的值可以强制转换,则返回浮点数,请参阅Coerceable::toFloat的有效值,如果值不能强制转换,则返回TypeError。

Coerce::toString

如果给定的值可以强制转换,则返回字符串,请参阅Coerceable::toString的有效值,如果值不能强制转换,则返回TypeError。

Coerce::stringToBool

如果给定的字符串可以强制转换,则返回布尔值,请参阅Coerceable::stringToBool的有效值,如果值不能强制转换,则返回TypeError。

Coerce::intToBool

如果给定的整数可以强制转换,则返回布尔值,请参阅Coerceable::intToBool的有效值,如果值不能强制转换,则返回TypeError。

Coerce::floatToBool

如果给定的浮点数可以强制转换,则返回布尔值,请参阅Coerceable::floatToBool的有效值,如果值不能强制转换,则返回TypeError。

Coerce::floatToInt

如果给定的浮点数可以强制转换,则返回整数,请参阅Coerceable::floatToInt的有效值,如果值不能强制转换,则返回TypeError。

Coerce::stringToInt

如果给定的字符串可以强制转换,则返回整数,请参阅Coerceable::stringToInt的有效值,如果值不能强制转换,则返回TypeError。

Coerce::stringToFloat

如果给定的字符串可以强制转换,则返回浮点数,请参阅Coerceable::stringToFloat的有效值,如果值不能强制转换,则返回TypeError。

Coerce::boolToString

将布尔值强制转换为字符串,返回'0'或'1'。

Coerce::intToString

将整数强制转换为字符串,返回数字字符串。

Coerce::floatToString

将浮点数强制转换为字符串,返回数字字符串。

强制一个值的类型

所有这些函数都只接受混合的$value作为参数,并返回它们所强制转换的类型,按照PHP严格模式的相同逻辑。

Enforce::asBool

如果$value是布尔值,则返回它。否则抛出TypeError。

Enforce::asInt

如果$value是整数,则返回它。否则抛出TypeError。

Enforce::asFloat

如果$value是整数或浮点数,则返回它。否则抛出TypeError。

Enforce::asString

如果 $value 是字符串,则返回它作为字符串。否则抛出 TypeError。