Как говорится в описании, у меня есть функция, которая принимает массив и объект в качестве аргументов и присваивает всем полям объектов их соответствующие значения в массиве в зависимости от типа объекта.Все объекты имеют разные поля, но все они имеют атрибут типа, который функция использует для определения полей, которые нужно назначить.
Это работает примерно так:
function unload($arr,&$obj){ <-- //&$obj not $obj
if($obj->type == 'A'){
echo 'Setting field for A';
$obj->a = $arr['a_value'];
//some more assignments..
}
elseif($obj->type == 'B'){
$obj->b = $arr['b_value'];
echo 'Setting field for B';
//some more assignments...
}
//some more elseifs
//return an error if
//object's type doesn't
//match
else{
echo 'Error: Object type '.$obj->type.' not recognized.';
}
}
$arr['a_value'] = 'SomeValue';
$arr['b_value'] = 'SomeOtherValue';
$obj = new A(); //A's type set to 'A' upon initialization
unload($arr,$obj);
echo 'A->a set to: '.$obj->a;
Вывод: A-> a set to:
Код вводит правильную ветвь для объекта, который передается, но ни одно из полей объекта не присваивается.Что я делаю неправильно?
Сервер работает под управлением PHP 4.4.7, я до сих пор не знаю, что вызывает это.
Редактировать: Я, наконец, понял, это была комбинация 2 вещей:
Я не осознавал, что ключевое слово $this
требовалось при обращении к именам полей класса из класса.Я предполагал, что переменные имеют глобальную область видимости, поэтому $this
был необязательным, как в Java.Вот почему просто изменение объявления функции не решило проблему.Теперь все отлично работает!