Проблема полягає в тому, що ви повинні встановити порожнє значення, сумісне з типом даних вашого поля. Якщо цього не зробите, ви отримаєте виняток. Таким чином, передача NULLчи array()коли очікується рядок призведе до помилки.
Інша річ, яку потрібно пам’ятати, - це те, що передані вами дані також залежатимуть від того, чи є ваше поле єдиним значенням, полем з багатозначним значенням або полем з кількома властивостями.
Якщо ваше поле є єдиним значенням (і, таким чином, обгортка для поля є екземпляром EntityValueWrapper ), тоді вам слід призначити йому порожнє значення, сумісне з відповідним типом даних . Наприклад, два наступні методи еквівалентні:
$wrapper->title = '';
$wrapper->title->set('');
Однак наступні три приклади створюють виняток, оскільки типи даних не сумісні з titleполем:
$wrapper->title->set();
$wrapper->title->set(NULL);
$wrapper->title->set(array());
Якщо ваше поле - це поле з декількома властивостями (наприклад, відформатоване текстове поле, яке визначає як a, так valueі formatвластивість) і, таким чином, екземпляр EntityStructureWrapper , то array()або NULLбуде правильним порожнім значенням. Тож ви можете зробити наступне:
$wrapper->field_formatted_text = array();
$wrapper->field_formatted_text = NULL;
Але в цьому випадку передача порожнього рядка призвела б до помилки. Зауважте, що ви могли обрати valueзамість цього властивість порожнім; у цьому випадку рядок є правильним типом даних:
$wrapper->field_formatted_text->value = '';
Нарешті, якщо ваше поле є багатозначним полем (і, отже, ваша обгортка є екземпляром EntityListWrapper ), то arrayабо NULLє правильні порожні значення, а наступні три рядки еквівалентні:
$wrapper->field_example_multiple->set();
$wrapper->field_example_multiple = array();
$wrapper->field_example_multiple = NULL;
Примітка: Виклик clearметоду на обгортці не є рівнозначним встановленню поля в порожнє значення. Коли для поля встановлено порожнє значення, воно викликає EntityMetadataWrapper :: updateParent у батьківській обгортці поля. Це забезпечує, крім усього іншого, те, що називається setter callbackвизначеним hoke_entity_property_info . Дзвінки clearцього не роблять.
EntityStructureWrapper::clear()абоEntityValueWrapper::clear()методи?