2010-12-06 5 views
0

Pas très bon à mettre cette question en mots ....OOP PHP: comment attribuer une valeur de variable?

J'utilise une API pour mettre à jour des informations client

$customer =    new Customer(); 
$customer->first_name = $value; 
$customer->update(); 

Ce qui précède le jour first_name, mais je voudrais variable où le prénom est comme:

$attribute =    'first_name';  
$customer =     new Customer(); 
$customer->$attribute =  $value; 
$customer->update();` 

Qui référencerait alors les variables publiques dans la classe Customer.

Je veux éviter d'écrire une méthode (setter) pour chaque attribut.

+3

Avez-vous essayé ce qui précède? Dit ça marche? Si oui, quelle est la question? – Gordon

+0

$ client -> {$ attribute} = $ valeur; –

+1

Votre problème est probablement la faute de frappe '$ attrubute'. –

Répondre

2

Les deux $obj->$attr et $obj->{$attr} fonctionnera de la même manière. Les {} sont redondantes dans ce cas. Ils ont du sens quand vous avez besoin d'écrire quelque chose comme $obj->{"123"}.

<?php 
$obj = new stdClass(); 
$attr = 'my_attr'; 
$obj->$attr = 'test'; 
var_dump($obj); 
?> 

Le problème avec votre code est que vous avez une faute de frappe. Ou si la faute de frappe était seulement dans le texte de la question, alors vous n'avez aucun problème.

+0

Cool ces deux travaux, dans quels cas les accolades seraient appropriées? des tableaux? – Haroldo

+1

@Haroldo En cas d'ambiguïté ou lorsque la syntaxe n'est pas autorisée. Ex. '$ obj -> {$ arr [3]}' au lieu de '$ obj -> $ arr [3]' ou '$ obj -> {" 123 "}' au lieu de '$ obj-> 123'. –

0

vous pouvez le faire comme

$attr = 'my_attr'; 
$obj->{$attr}; 
+1

en fait cela fonctionne sans accolades ainsi – Fluffy

Questions connexes