squirrelphp / types
显式处理 PHP 中的类型强制和执行,以更可预测和更安全的方式处理未知数据。
Requires
- php: >=8.0
- squirrelphp/debug: ^2.1
Requires (Dev)
- bamarni/composer-bin-plugin: ^1.8
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-13 15:02:55 UTC
README
显式处理 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。