dreamscapes / scalars
此包已被废弃,不再维护。未建议替代包。
PHP中定义的对象作为标量类型,以允许更严格的数据类型安全
dev-develop
2015-05-06 12:54 UTC
Requires
- php: >=5.4.0
Requires (Dev)
This package is not auto-updated.
Last update: 2024-01-06 14:04:57 UTC
README
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 文件。