Разница между setData () и addData ()

15

Какая разница между setData()а addData()? Есть ли связь, если я обновляю продукт или устанавливаю новый?

user1240207
источник

Ответы:

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')то? :-) (замечательно, если вы добавите этот конкретный момент в свой ответ)
Раджив К Томи
@RajeevKTomy. Выполнено.
Мариус
Извините, я могу объявить вам только один раз :-)
Rajeev K Tomy
ваше обновление отличается. Вы пропустили указанный выше запрос. Я спросил, $obj->setData('k2'=>'v2399393')а не$obj->setData(array('k2'=>'v2000'))
Rajeev K Tomy
@RajeevKTomy. Это шутка?
Мариус
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()то вам нужно сделать этот тип works.need Для двух полей вам нужно вызвать функцию 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функциями класса библиотеки .

addData () с использованием setData () в файле lib для установки значения поля с помощью цикла.

public function addData(array $arr)
{
    foreach($arr as $index=>$value) {
        $this->setData($index, $value);
    }
    return $this;
}
Амит Бера
источник
4
Вы можете использовать setDataдля установки более одного поля одним вызовом.
Мариус
@Marius У меня есть проверка класса lib. и вы ответите яснее, чем я
Амит Бера