Пользовательские Фильтры/Блоки проверки допустимости в Платформе Зенда

Почти наверняка ваш код вставки выглядит следующим образом:

bool List::insert(const Patient& newElement)
{
    ...
    elements[someIndex] = newElement;
    ...
}

Это не помещает newElement в массив, это присваивает его существующему элементу в массиве (т.е. вызывает Patient::operator=).

Таким образом, они являются двумя отдельными объектами. Изменение того, что находится вне массива, не влияет на то, что входит в массив, и наоборот.

В List может потребоваться что-то, что может вернуть ссылку на один из объектов массива, чтобы позволить вам изменить его. Например,

Patient& List::operator[](size_t index)
{
   //<test here to make sure index is in range>
   return elements[index];
}

Это позволит вам сделать что-то вроде:

Patient& pat = theList[0];
pat.setEmail("test@email.com");

и элемент в массиве покажет это изменение.


И / или, я неправильно читаю, а вы просто неправильно реализовали operator=.

9
задан hakre 1 July 2012 в 15:05
поделиться

1 ответ

Я разработал и реализовал Zend_Filter_Input назад в 2007.

Можно добавить новые префиксы класса, чтобы помочь загрузить пользовательский фильтр и классы блока проверки допустимости. По умолчанию, Zend_Filter_Input поиски классов, которые имеют префиксы "Zend_Filter" и "Zend_Validate". Попробуйте это:

$inputFilter->addNamespace('Core_Filter');

Перед выполнением isValid() или другие методы объекта.

С другой стороны, можно также передать новую строку префиксов класса в массиве options, четвертом аргументе к Zend_Filter_Input конструктор:

$options = array('inputNamespace' => 'Core_Filter');
$inputFilter = new Zend_Filter_Input($filters, $validators, $data, $options);

См. также документацию, для которой я записал Zend_Filter_Input.

18
ответ дан 4 December 2019 в 11:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: