2010-06-05 56 views
2

在我的代碼中的一些部分我需要的是這樣的:目的PHP和關鍵值編碼

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

在我需要的那種KVC的 - 換句話說是指通過在運行時產生的字段名稱獲取對象字段。 我只需要擴展一些現有的系統並保持字段命名約定,所以不要建議我改變字段名稱。

我知道這樣的事情適用於數組,當你可以很容易地做到這一點:

$price = $product[$price_field_key]. 

所以我可以動態生成數組鍵。 但如何做到這一點的對象? 請幫助我,因爲谷歌給我陣列等結果的河流... 謝謝

回答

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

對不起。 這比我想象的要容易得多。 希望它會幫助別人。簡單地說:

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

所以你可以使用varialbe來獲取Php中的對象字段。

我去遠與$$ ;-)

問候

+0

僅供參考,使用$$可解析變量的內容。例如'$ a ='b'; $ b ='key'; echo $ foo - > $$ a'與本例中的$ foo-> key相同。 – Matthew 2010-06-05 20:04:58

1

如何使用get_object_vars

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

其實這看起來更像是一個黑客;-)但我喜歡它+1 – streetparade 2010-06-05 20:31:27

1

Actualy它會工作如下。

$product_type = $product->type; 


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


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

謝謝 - 這很容易。太容易了,所以我甚至沒有嘗試過.... – Lukasz 2010-06-05 20:44:48