setbased/helper-cast

安全地将混合值转换为布尔值、浮点数、整数或字符串

3.0.1 2023-02-19 09:23 UTC

This package is auto-updated.

Last update: 2024-09-19 13:22:37 UTC


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 分别产生 truenull
  • '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

参考

许可证

本项目遵循 MIT 许可证。