Zend framework2 Zend Framework2-exchangeArray()和populate()之间的差异

Zend framework2 Zend Framework2-exchangeArray()和populate()之间的差异,zend-framework2,Zend Framework2,我想了解ZF2中exchangeArray()和populate()方法之间的区别,以及如何使用它们。 根据ZF2文件: Zend\Stdlib\Hydrator\arrayserizable 遵循ArrayObject的定义。对象必须实现 用于支持水合作用的exchangeArray()或populate()方法,以及 getArrayCopy()方法支持提取 但是不清楚如何使用它们。正如文档所指出的,如果我们遵循ArrayObject中exchangeArray()的定义,它只会用另一个数组

我想了解ZF2中exchangeArray()和populate()方法之间的区别,以及如何使用它们。
根据ZF2文件:

Zend\Stdlib\Hydrator\arrayserizable

遵循ArrayObject的定义。对象必须实现 用于支持水合作用的exchangeArray()或populate()方法,以及 getArrayCopy()方法支持提取


但是不清楚如何使用它们。

正如文档所指出的,如果我们遵循
ArrayObject
exchangeArray()
的定义,它只会用另一个数组替换当前的数据数组。如果您要传递的新数组中不再包含已存储的数据,则可能会丢失这些数据

public function exchangeArray($data)
{
    ...

    $storage = $this->storage;

    $this->storage = $data;

    return $storage;
}
为了解决这个问题,您可以实现一个
populate()
函数。一个简单的填充函数可以是:

public function populate($data)
{
    foreach ($data as $key => $var) {
        $this->storage[$key] = $var;
    }
}
在这里,我们不会有丢失数据的风险,只会创建新条目或覆盖现有值