dreamscapes/scalars

此包已被废弃,不再维护。未建议替代包。

PHP中定义的对象作为标量类型,以允许更严格的数据类型安全

dev-develop 2015-05-06 12:54 UTC

This package is not auto-updated.

Last update: 2024-01-06 14:04:57 UTC


README

Built with GNU Make

PHP中的标量值类型提示

关于

使用此库,您可以为标量值使用函数/方法类型提示,就像使用对象一样。

安装

使用Composer

composer require dreamscapes/scalars:dev-master (访问 Packagist 查看所有可用版本)

用法

以下标量类型可作为类使用

  • Scalar - 接受任何标量值(bool, int, float, string)
  • Number - 接受任何数值(float, int)
  • Int - 只接受整数
  • Float - 只接受浮点数
  • Bool - 只接受布尔值
  • String - 只接受字符串

这些中的任何一个都可以在函数/方法签名中使用

function takeString(String $str) { /* do stuff with $str */ }

要向此类函数传递字符串,您有两种完全等效的选项

takeString(String('my string'));
// or...
takeString(new String('my string'));

在函数内部,您可以通过以下方式获取传递的实际值

function takeString(String $str)
{
    // $str is instance of String, but we need the actual string
    // to do something useful with it:
    $str = $str->val;
    // or...
    $str = $str();
}

如果使用错误的标量类型怎么办?

没有类型安全的类型提示就像没有实例的类一样。因此,如果您尝试这样做

// WARNING - BAD!
$bool = Bool('but I am a string!');

将触发一个错误(精确地说,是 E_USER_ERROR

为Bool提供的类型无效,提供了字符串

注意:不要尝试将这些转换为异常并捕获它们 - 这种类型的错误是程序员错误,应立即修复。

转换为不同类型

如果您有一个值并且希望将其视为特定的标量类型(例如,您有一个整数,希望将其视为布尔值),可以使用以下完全等效的选项之一

$bool = Bool((bool)'I will be truthy!');
// or...
$bool = Bool::cast('I will also be truthy!');

Scalar::cast() 方法使用 PHP 的内部标量转换机制通过 settype。这是好事还是坏事取决于您的判断。

数组在哪里?

数组不是标量类型。您可以使用不带任何语法糖来类型提示数组。

许可证

此软件根据 BSD (3-Clause) 许可证 许可。有关更多信息,请参阅 LICENSE 文件。