我什么时候可以在PHP数组上使用Hack dict



文档非常轻。该接口看起来几乎与数组完全相同。

我什么时候更喜欢dict?

php中的数组既是字典又是向量。这很令人困惑。同样在数组中,存在对integer的密钥强制。这更令人困惑。

破解dicts旨在消除歧义,并用密钥解决问题。

展开一点:

  • Hack与PHP有所不同——最终,这可能意味着PHP数组在某个时候被从语言中删除,或者变得相当不方便。最终,如果你在写Hack,你应该更喜欢Hack dict/vec/keyset而不是PHP数组
  • 在巴勃罗的观点上,array<string, Tv>是一个谎言,打破了哈克的类型体系。array_keys(['123' => 'bar'])[0]int,而不是stringdictkeyset的情况并非如此
  • 黑客标准库为黑客阵列提供了一致的API。虽然大多数容器函数可以将PHP数组作为输入,但它们会生成Hack数组

一个更有趣的问题是"黑客数组"(vecdictkeyset)与"黑客集合"(MapSetVector)及其常量/不可变亲属。这很有争议。

主要区别在于它们是对象,而不是值;这实际上意味着,传递给它们的函数可以对它们进行变异,而vec/dict/keyset的行为就好像它们是写时复制一样。通常需要写时复制行为,但偶尔也需要对象行为。

这就是它引起争议的地方:-有些人认为,如果你想要类似对象的语义,你应该使用Hack Collections-我个人认为最好将其包装在一个"Ref"类中:例如class Ref<T> { public function __construct(public T $value) {}-并使用标准的API对$ref->value进行操作;这使您可以对两者使用相同的API(HSL),而不是集合对象具有的略微不同的API

相关内容

  • 没有找到相关文章

最新更新