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