setData()和addData()之间的区别


15

setData()和之间有什么区别addData()?更新产品或设置新产品是否存在连接?

Answers:


32

setData覆盖现有数据,并且可以将一对键值或数组作为参数接收。
如果您将一对键值设置为参数,则$_data[key]变为value。如果将参数设置为数组,$_data则该数组将覆盖先前包含的内容。
例:

$_data = array('k1' => 'v1' , 'k2' => 'v2');

调用$obj->setData('k3','v3')结果

$_data = array('k1' => 'v1' , 'k2' => 'v2', 'k3'=>'v3');

调用$obj->setData(array('k3'=>'v3'))结果

$_data = array('k3'=>'v3');

调用$obj->setData('k2','v2000')结果

$_data = array('k1' => 'v1' , 'k2' => 'v2000')

调用$obj->setData(array('k2'=>'v2000'))结果

$_data = array('k2'=>'v2000');

addData 仅接收一个数组作为参数,并将该数组与现有数据合并。

例:

$_data = array('k1' => 'v1' , 'k2' => 'v2');

调用$obj->addData(array('k3'=>'v3'))结果

$_data = array('k1' => 'v1' , 'k2' => 'v2', 'k3'=>'v3');

但调用$obj->addData(array('k2'=>'v2000'))结果

$_data = array('k1' => 'v1' , 'k2' => 'v2000');

当我们这样做时会发生什么$obj->setData('k2'=>'v2399393')?:-)(如果您在回答中添加此特定点,那就太好了)
Rajeev K Tomy 2015年

@RajeevKTomy。做完了
Marius

抱歉,我只能投票给您一次:-)
拉杰夫K Tomy 2015年

您的更新是不同的。您跳过了上面指定的请求。我$obj->setData('k2'=>'v2399393')没有问过$obj->setData(array('k2'=>'v2000'))
Rajeev K Tomy 2015年

@RajeevKTomy。你在开玩笑吗?
Marius

7

setData()

功能是only set one field value on one call。它可以set multiple field value using multiple call of setData function

addData()函数是set multiple field values using array with array key as field index.

只是示例:

您要在对象上设置两个字段。

  • 字段a>值-> X
  • 栏位b>值-> Y

如果我使用的setData()话,那么你需要做这种类型的工作。需要两个字段,您需要明智地调用setData函数。

$ObVarien->setData('fieldA',$X);
$ObVarien->setData('fieldB',$Y);

但是,如果我使用,addData()那么你可以做到这一点array key as field name

$Data=array('fieldA'=>$X,'fieldb'=>$Y)

$ObVarien->addData($Data)

addData()setData()是两个库 Varien_Object类函数。

在lib文件中使用setData()的addData()可以使用循环来设置字段值。

public function addData(array $arr)
{
    foreach($arr as $index=>$value) {
        $this->setData($index, $value);
    }
    return $this;
}

4
您可以setData一次呼叫设置多个字段。
马里斯

@Marius我已经检查了lib类。你的回答比我还清楚
阿米特·贝拉
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.