Pimple源代码:为什么将对象id和对象本身存储在不同的数组中?

时间:2015-09-09 15:18:48

标签: php arrays silex pimple

查看Pimple source code我发现它将对象及其id存储在两个不同的数组中:

class Container implements \ArrayAccess
{
    private $values = array();
    ...
    private $keys = array();
}

然后:

public function offsetSet($id, $value)
{
    ...
    $this->values[$id] = $value;
    $this->keys[$id] = true;
}

最后:

public function offsetGet($id)
{
    if (!isset($this->keys[$id])) {
        throw new \InvalidArgumentException(sprintf('Identifier "%s" is not defined.', $id));
    }
}

我在Phalcon源代码here中也看到了类似的东西。

我的问题是为什么要单独存储对象ID键,为什么不只是if (!isset($this->values[$id]))?在数组中搜索更快吗?我做了一些测试,似乎搜索速度差不多。

0 个答案:

没有答案