2010-06-05 10 views
2

Dans une partie de mon code, je besoin de quelque chose comme ceci:PHP Objectif clé et la valeur de codage

$product_type = $product->type; 
$price_field = 'field_'.$product_type.'_price'; 
$price = $product->$$price_field; 

En d'autres termes, j'ai besoin genre de KVC - sortiras champ objet par son nom de champ produit à l'exécution. J'ai simplement besoin d'étendre un système existant et de conserver la convention de nommage des champs, alors ne me conseillez pas de changer les noms de champs à la place.

Je sais quelque chose comme cela fonctionne pour les tableaux, où l'on pouvait facilement le faire par:

$price = $product[$price_field_key]. 

Je peux produire dynamiquement la clé pour le tableau. Mais comment faire cela pour les objets? S'il vous plaît aidez-moi comme google me donne la rivière des résultats pour les tableaux, etc ... Merci

Répondre

5
$price = $product->{$price_field}; 
2

Désolé les gars. C'était beaucoup plus facile que je ne le pensais. Hopefullty ça va aider quelqu'un. Tout simplement:

$price_field = 'field_'.$product_type.'_price'; 
$price = $product->$price_field; 

Vous pouvez donc utiliser varialbe pour obtenir le champ objet dans Php.

Je suis allé trop loin avec ces $$ ;-)

Cordialement

+0

FYI, en utilisant $$ résout le contenu de la variable. par exemple, «$ a = 'b'; $ b = 'clé'; echo $ foo -> $$ a' est identique à '$ foo-> key' dans cet exemple. – Matthew

1

Comment l'utilisation get_object_vars?

$price_field = 'field_'.$product_type.'_price'; 
$instvars = get_object_vars($product); 
$price = $instvars[$price_field]; 
+0

Actuellement, cela ressemble plus à un hack ;-) mais je l'aime +1 – streetparade

1

il travaillerait actuellement comme suit.

$product_type = $product->type; 


$price_field = "field_".$product_type"._price"; 


$price = $product->$price_field; 
+0

Merci - c'était si facile. Trop facile donc je n'ai même pas essayé ... – Lukasz