granam/scalar

轻量级标量类型容器

安装次数: 28,748

依赖: 8

建议者: 0

安全: 0

星标: 2

关注者: 2

分支: 0

公开问题: 0

类型:项目

5.1.0 2021-03-24 09:42 UTC

README

Build Status

自 PHP 7.0 起提供标量类型提示,但没有任何原生函数能够保护我们免受类型转换中值丢失的影响。

因此,如果我们想确保标量类型,标量转换器和可选的类型检查类是唯一的机会。

警告:转换器和相应的包装类不会将 null 转换为其他类型 - 它仍然保持 null。

<?php
namespace Granam\Scalar;

$scalar = new Scalar('foo');

// foo
echo $scalar;

$nullScalar = new Scalar(null);
// false
echo is_scalar($nullScalar->getValue());
// true
echo is_null($nullScalar->getValue());

// NULL
var_dump(ToScalar::toScalar(null);

try {
  Tools\ToScalar(null, true /* explicitly strict */);
} catch (Tools\Exceptions\WrongParameterType $scalarException) {
  // Something get wrong: Expected scalar or object with __toString method on strict mode, got NULL.
  die('Something get wrong: ' . $scalarException->getMessage());
}

为什么默认情况下 NULL 保持为 NULL?因为这比强制将类型转换为未知值(NULL 就是未知)要好。如果你想确保标量类型,请使用 StrictScalar。但仍然,将 NULL 转换为标量类型必须由 完成。