karimgeiger/generics

此包已被弃用且不再维护。未建议替代包。

PHP的泛型实现

dev-master / 1.0.x-dev 2016-06-21 19:36 UTC

This package is not auto-updated.

Last update: 2023-08-16 20:08:06 UTC


README

codecov Build Status

PHP目前积累了一些缺少的语言特性。使用PHP 7,我们现在甚至有标量类型声明。

但有一个非常重要的特性缺失:一旦你开始处理数组,所有东西都会丢失。你将无法确定你检索到的值或键是否为正确的类型。别担心了!有了这个简单的泛型类,你终于可以放松了。

它是如何工作的?

非常简单。如果你想控制键和值的类型,可以创建一个Generics\Dictionary对象,或者如果你只关心值,可以创建一个你想要类型的Generics\ArrayList对象

$list = new Generics\Dictionary('string', 'double', ['foo' => 1.5, 'bar' => 13.37]);

然后你就可以使用它了

$list['baz'] = 3.14;

var_dump($list->toArray());
/// ['foo' => 1.5, 'bar' => 13.37, 'baz' => 3.14]

但是,一旦发生什么不好的事情...

$list['sample'] = 1;
// Generics\Exceptions\InvalidTypeException: Type must be double, but integer was given.

很简单,对吧?当然,这不仅适用于PHP类型,也适用于你自己的类。构造函数的第一个参数将针对键类型,第二个参数将针对值类型。作为第三个选项,你可以预先填充你的列表。

如果你更喜欢一个简单的列表,具有整数字符键和泛型值

$newList = new Generics\ArrayList(YourObject::class);
$newList[] = new YourObject();

如果你熟悉其他语言,可以将其视为Generics\Dictionary(data);Generics\ArrayList(data);

特性

这个库尽可能小巧。没有依赖。只需纯PHP7。为了确保你的安全:你将获得100%的代码覆盖率,因为确保一切按预期工作非常重要。

用法

将此包添加到composer.json文件的require部分并更新你的项目。

"require": {
    "karimgeiger/generics": "1.0.x-dev"
}
composer update

贡献

喜欢这个项目?想贡献?太好了!请随意打开一些Pull请求或只是一个问题。我不会咬你 :)