setbased / helper-cast
安全地将混合值转换为布尔值、浮点数、整数或字符串
3.0.1
2023-02-19 09:23 UTC
Requires
- php: >=8.1
Requires (Dev)
- phing/phing: ^3.0.0-RC4
- phpunit/phpunit: ^9.5.28
README
此软件包包含一个强类型实用工具类,用于安全地测试和将混合值转换为布尔值、浮点数、整数或字符串值。
理由
此软件包的目的是什么?为什么它是必要的?PHP 是一种很好的语言,但是它有一些怪癖。其中之一是,即使启用了严格类型,PHP 也会将任何字符串转换为整数。
以下代码不会引发任何错误或警告(在 PHP 7.2.12 上测试过)
<?php declare(strict_types=1); ini_set('display_errors', '1'); error_reporting(E_ALL); echo '1: ', (int)'3.14', PHP_EOL; echo '2: ', (int)'123abc', PHP_EOL; echo '3: ', (int)"Ceci n'est pas une pipe.", PHP_EOL; echo '4: ', (int)'', PHP_EOL; echo '5: ', (int)null, PHP_EOL;
但它会产生以下输出
1: 3
2: 123
3: 0
4: 0
5: 0
此软件包提供了一种强类型实用工具类,用于安全地测试和将混合类型值转换为布尔值、浮点数、整数或字符串值。
手册
SetBased\Helper\Cast
类有以下方法用于测试混合值与原始数据类型
SetBased\Abc\Helper\Cast
类具有以下表格中所示的方法,用于将混合值转换为原始数据类型。如果值无法转换,将抛出异常。
备注
- 'opt' 是可选的缩写:有效的
null
值。测试和转换null
分别产生true
和null
。 - 'man' 是必需的缩写:不允许
null
值。测试null
产生false
,而转换null
将抛出异常。
示例
代码
<?php declare(strict_types=1); use SetBased\Helper\Cast; $value = "Ceci n'est pas une pipe."; if (Cast::isManInt($value)) { echo 'This is not an integer', PHP_EOL; } else { echo Cast::toManInt($value), PHP_EOL; } echo Cast::toManFloat($value), PHP_EOL;
输出
This is not an integer
Exception
有限浮点数
浮点数可以是有限的(例如,3.14)、无限的(即 INF 或 -INF)或不是数字(即 NAN)。[is|to][Man|Opt]FiniteFloat
方法将帮助确定一个值是否是实数浮点数。
布尔值
只有以下值才是布尔值的有效表示
false
- int(0)
- string(1) "0"
- bool(false)
true
- int(1)
- string(1) "1"
- bool(true)
因此,只有这些值可以安全地转换为布尔值,反之亦然。
安装
composer require setbased/helper-cast
参考
- PHP RFC:安全转换函数
- 一个功能性强,更接近原始 RFC 实现的 theodorejb/PolyCast 。
许可证
本项目遵循 MIT 许可证。