__ set / __ get with array properties

Интересно, можно ли сделать что-то вроде следующего (я знаю, что код не будет работать так, как задумано, просто пытаюсь донести цель):

class Form
{
    private $v = array();

    function __set($varName, $varValue)
    {
        ... do some treatment on the varValue ...
        $this->v[$varName] = $varValue;
    }

    function &__get($varName)
    {
        if(!isset($this->v[$varName]))
            $this->v[$varName] = NULL;

        return $this->v[$varName];
    }
};

Я хочу иметь возможность установить переменную например:

$ form-> Values ​​['any'] = 'dirty';

и пусть он будет запущен через функцию установки, которая вызовет некоторые операции очистки и фактически заполнит пару других массивов, таких как 'HtmlValues' и 'SqlValues', чтобы я мог просто вытащить значения, закодированные для нужного мне формата, чтобы позже я мог вызвать

echo $ form-> HtmlValues ​​['any'];

Проблема, конечно же, обычная проблема: если вы просто используете _ get, вы получите значение, которое возвращается, и даже если & _get возвращает его по ссылке и что-то вроде работы, тип данных 'a susp = Susp of (unit ->' a) // Функция для хранения вычислений Я думаю ...

Я пытаюсь выяснить, как новая system_error вместе с error_code , error_category и не в последнюю очередь (предназначенная для реализации портативный отчет об ошибках) error_condition .

Я думаю, прочитав boost.system , я понимаю, как мне следует использовать error_codes и категория_ошибки . В описании не упоминается, как это используется в сочетании с генерацией исключения с «system_error», но я могу догадаться по интерфейсу этого класса.

class system_error : public runtime_error {
public:
  // [...]
  system_error(error_code ec, const string& what_arg);
  system_error(int ev, const error_category& ecat, const string& what_arg);
  system_error(int ev, const error_category& ecat);
  // [...]

Итак, я выбрасываю исключение system_error с правой int + категория_ошибки или код_ошибки с его методом error_category () -метод. правильно?

Есть хороший пример, где я могу взглянуть на код, как error_condition должен быть расширен пользователем в сочетании с system_error -exceptions ?

12
задан CesarB 24 September 2011 в 23:51
поделиться