Comme l'indique la description, j'ai une fonction qui prend en argument un tableau et un objet et assigne tous les champs d'objets à leurs valeurs respectives dans le tableau en fonction du type de l'objet. Les objets ont tous des champs différents, mais ils ont tous un attribut type que la fonction utilise pour déterminer les champs à affecter.Affecter des champs de classe PHP à des valeurs de tableau lors du passage des deux dans une fonction ne définit pas les champs, pourquoi?
Il fonctionne comme ceci:
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;
Sortie: A> un ensemble à:
Le code entre la branche correcte pour l'objet qui est passé dans, mais aucun des champs de l'objet être affecté. Qu'est-ce que je fais mal?
Le serveur fonctionne sous PHP 4.4.7, je n'ai toujours aucune idée de ce qui cause cela.
Edit: Je ENFIN tout compris, il était une combinaison de 2 choses:
Je ne réalisais pas les noms des champs de classe lorsque le référencement était nécessaire mot-clé $this
à partir de la classe. J'ai supposé que les variables avaient une portée globale donc $this
était optionnel comme c'est le cas en Java. C'est pourquoi le simple fait de changer la déclaration de la fonction n'a pas résolu le problème. Maintenant tout fonctionne bien!
Sont-ils 'private' dans l'objet? – alex
ne peut pas voir d'erreurs évidentes .. pourriez-vous créer un cas de test simple et l'inclure dans votre question? Notez que plutôt que d'avoir une fonction -> type, vous pouvez utiliser 'instanceof '(par exemple' if ($ obj instanceof SomeClass) {... ' – Hamish
@Hamish Ouais cela fonctionnerait, mais la propriété' type' * peut être quelque chose peu importe de quelle classe c'est – alex