granam / scalar
轻量级标量类型容器
5.1.0
2021-03-24 09:42 UTC
Requires
- php: >=7.3
- granam/strict-object: ^3.0
- granam/tools: ^6.0
Requires (Dev)
- granam/exceptions-hierarchy: ^5.0
- mockery/mockery: ^1.2
- phpunit/phpunit: ^9.0
README
自 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 转换为标量类型必须由 你 完成。