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条款)许可证。有关更多信息,请参阅LICENSE文件。